有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    erPrimtall函数的真/假值颠倒

    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;
        }
    }