我正在尝试创建一个程序,允许用户输入选定数量的数字,作为回报,用户获得两个列表。一个显示哪个数字是素数,另一个显示非素数。为什么这不起作用?当我想要它们在不同的数组中时,我最终将所有数字都放在同一个数组中。在isPrime方法中将isPrime初始化为true时,当我将其初始化为false时,所有数字都会进入prime数组并进入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;
}
答案 0 :(得分:0)
你的erPrimtall函数反转了true / false值。
static boolean erPrimtall(int values) {
boolean isPrime = true;
for(int i = 2; i < values; i++) {
if(values % i == 0) {
isPrime= false;
break;
}
}
return isPrime;
}
您可以通过循环直到i <= Math.sqrt(values)
我还建议使用ArrayList而不是数组来存储素数和非素数,否则你将不得不做一些记账来跟踪到目前为止有多少素数/非素数。
完整修订代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
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();
}
List<Integer> prime = new ArrayList<Integer>();
List<Integer> notPrime = new ArrayList<Integer>();
for(int i = 0; i < values.length; i++) {
if(erPrimtall(values[i])) {
prime.add(values[i]);
} else {
notPrime.add(values[i]);
}
}
System.out.println("Prime numbers:");
for(int n : prime){
System.out.println(n);
}
System.out.println("Other numbers:");
for(int n : notPrime) {
System.out.println(n);
}
in.close();
}
static boolean erPrimtall(int values) {
boolean isPrime = true;
for(int i = 2; i <= Math.sqrt(values); i++) {
if(values % i == 0) {
isPrime = false;
break;
}
}
return isPrime;
}
}
答案 1 :(得分:0)
我明白了。我不得不将布尔变量isPrime变成一个数组。现在,所有整数值都对应于布尔数组中的一个布尔值。