java素数方法不起作用
我试图创建一个程序,允许用户输入选定数量的数字,作为回报,用户可以得到两个列表。一个显示哪些数字是素数,另一个给出非素数。为什么这不管用?我最终得到了同一个数组中的所有数字,而我希望它们在不同的数组中。当在isPrime方法中将isPrime初始化为true时,所有的数字都进入素数数组,当我将其初始化为false时,所有的数字都进入notPrime数组
public static void main(String[] args) {
System.out.println("How many numbers do you want to input?");
Scanner in = new Scanner(System.in);
int number = in.nextInt();
int[] values = new int[number];
for(int i = 0; i < values.length; i++) {
System.out.println("Give value number " + (i+1) + ":");
values[i] = in.nextInt();
}
int[] prime = new int[values.length];
int[] notPrime = new int[values.length];
for(int i = 0; i < values.length; i++) {
boolean erPrimtall = erPrimtall(values[i]);
if(isPrime == true) {
prime[i] = values[i];
} else {
notPrime[i] = values[i];
}
}
System.out.println("Prime numbers:");
for(int i = 0; i < values.length; i++){
System.out.println(prime[i]);
}
System.out.println("Other numbers:");
for(int i = 0; i < values.length; i++){
System.out.println(notPrime[i]);
}
}
inn.close();
}
static boolean isPrimtall(int values) {
boolean isPrime = true;
for(int i = 2; i < Math.sqrt(values); i++) {
if(values % i == 0) {
isPrime= false;
break;
}
}
return isPrime;
}
# 1 楼答案
erPrimtall函数的真/假值颠倒
你可以通过循环直到
i <= Math.sqrt(values)
来进一步优化这个函数我还建议使用ArrayList而不是数组来存储素数和非素数,否则您将不得不做一些簿记来跟踪到目前为止有多少素数/非素数
完整修订代码: