我有下一个任务:
编写一个返回屏幕读取的带有块lambda表达式的数字的类型的供应商
写一个 predicate ,告诉我们输入的数字是否是一个带for循环的块表达式的素数。将其应用于供应商的结果。
必须返回:
每个屏幕24写一个整数供应商24生成的数字不是素数
或
为每个屏幕23写入一个整数。供应商屏幕23生成的数字为primo
取决于输入的数字是否为素数。
我的代码如下:
import java.util.Scanner;
import java.util.function.Supplier;
import java.util.function.Predicate;
public class Ejercicio4 {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
Supplier <Integer> numeroPorPantalla = () ->{
int n;
System.out.println("Escriba un número entero por pantalla");
n=teclado.nextInt();
return n;
};
Predicate<Integer> esPrimo = (n) -> {
int a = 0;
int i;
for (i=1; i<= n; i++) {
if (n % 1 == 0) {
a++;
}
}
if (a != 2) {
System.out.println("The supplier number "+numeroPorPantalla.get()+" is not prime");
} else {
System.out.println("The supplier number "+numeroPorPantalla.get()+" is prime");
}
return true ;
};
System.out.println("");
System.out.print(esPrimo.test(numeroPorPantalla.get()));
}
}
我跑步时遇到的问题是:
它要求我输入值的2倍,而它应该只有1倍。
for循环对我来说不是很好,因为它总是返回它不是素数
它还返回了“真实”的说教,它不应该返回任何东西。
我很感激能得到的任何帮助。
1条答案
按热度按时间jv2fixgn1#
第二次调用Numeroporpantala是在
System.out.println("The supplier number "+numeroPorPantalla.get()+"is prime");
你可以写n
控制台,而不是调用供应商两次if (n % 1 == 0)
-整数除以一的余数总是0