问题描述
编写一个类型为使用块 lambda 表达式返回屏幕读取数字的供应商
写一个谓词,告诉我们输入的数字是否是带有 for 循环的块表达式的素数。将其应用于供应商的结果。
必须返回:
或
每个屏幕写一个整数 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 循环对我来说效果不佳,因为它总是返回它不是质数
-
它也返回了说教的“真实”,它不应该返回任何东西。
我很感激我能得到的任何帮助。
解决方法
- 第二次调用 numeroPorPantalla 在
System.out.println("The supplier number "+numeroPorPantalla.get()+"is prime");
您可以将 n
写入控制台,而不是两次调用供应商
-
if (n % 1 == 0)
- int 数除以 1 的余数总是 0