素数方法不起作用

时间:2016-10-04 15:24:41

标签: java numbers primes

我正在尝试创建一个程序,允许用户输入选定数量的数字,作为回报,用户获得两个列表。一个显示哪个数字是素数,另一个显示非素数。为什么这不起作用?当我想要它们在不同的数组中时,我最终将所有数字都放在同一个数组中。在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;
}

2 个答案:

答案 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变成一个数组。现在,所有整数值都对应于布尔数组中的一个布尔值。