数组和布尔类型 JAVA

3

我有这段代码:

public class TestPrimaryArray
{
   public static void main(String[] args)  
   {
      Scanner scan = new Scanner(System.in);
      System.out.println("Enter 5 numbers: ");
      int[] numbers = new int[5];
      for(int i = 0; i < numbers.length; i++)
      {
         numbers[i] = scan.nextInt();
         boolean isPrime = PrimeArray(numbers);
         System.out.println("Is " +numbers[i]+ " a prime? " +isPrime);
      }
   }

   public static boolean PrimeArray(int[] arr)
   {
      boolean prime = true;
      for(int i = 1; i < arr.length; i++)
      {
         if(arr[i]%2 == 1)
            prime = true;
         else
            prime = false;    
      }
      return prime;
   }
}

这个程序应该从用户获取输入并将其放入长度为5的一维数组中,然后判断这些数字是否为质数。我运行了代码并成功编译,但当我看到结果时,它并没有给我正确的答案。 以下是使用数字11 7 3 5 20进行示例运行:

Enter 5 numbers: 
11 7 3 5 20
Is 11 a prime? false
Is 7 a prime? false
Is 3 a prime? false
Is 5 a prime? false
Is 20 a prime? false

它应该告诉我除了20以外的所有条件都是真的。我不知道我做错了什么。我该怎么办?


为什么每次调用PrimeArray都需要传入一个数组?你是否注意到,你在每个传递进来的数字上都设定了变量prime,并在循环结束后返回它的值?因此很明显,它只能返回你数组中最后一个数字的结果。所以请重新思考一下PrimeArray方法。 - Tom
一些提示:你真的认为所有奇数都是质数吗?要确定一个数字是否是质数,为什么需要所有其他数字呢? - Henry
为什么每次都将整个数组作为输入传递给PrimeArray方法?使用第一个for循环填充数组。在primeArray中使用第二个for循环打印输出。 - yogidilip
4个回答

2

首先,你应该逐个测试值(因为你只返回一个boolean)。其次,你应该短路并在第一次可被整除时返回。否则,由于重置了prime的值,你将返回true。最后,Java方法名称以小写字母开头(按照惯例)。此外,你的方法仅测试偶数性。我认为你想要的是这样的:

public static boolean isPrime(int val)
{
    for(int i = 2; i < (val / 2); i++)
    {
        if(val % i == 0)
            return false;
    }
    return true;
}

1
您正在检查所有元素,但只返回最后一个元素,即false20%20,因此您的条件为false)。
相反,您必须返回一个布尔数组,并打印每个元素。
import java.util.Scanner;
public class TestPrimaryArray {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System. in );
        System.out.println("Enter 5 numbers: ");
        int[] numbers = new int[5];
        for (int i = 0; i < numbers.length; i++) {
            numbers[i] = scan.nextInt();
            boolean isPrime[] = PrimeArray(numbers);
            System.out.println("Is " + numbers[i] + " a prime? " + isPrime[i]);
        }
    }

    public static boolean[] PrimeArray(int[] arr) {
        boolean prime[] = new boolean[arr.length];
        for (int j = 0; j < arr.length; j++) { //Arrays start from index 0
            for(int i = 2; i <= Math.sqrt(arr[j]); i++) { //Compare until the square root of the number since it's faster and after this value you have checked if a number is prime or not.
                if(arr[j] % i == 0) {
                    prime[j] = false;
                    break;
                } else {
                    prime[j] = true;
                }
            }
        }
        return prime;
    }
}

你好,我是数字“九”,我在这里告诉你:我不是质数。 - Tom
@Henry 更新了答案,现在它可以正确地检查一个数字是否为质数。 - Frakcool

0

质数是大于1的整数,其唯一的两个整数因子是1和它本身。前几个质数是2、3、5、7、11、13、17、19、23和29。

首先,您不应将数组传递给函数,您编写的PrimeArray函数始终返回数组中最后一个项目的计算值。

其次,您编写的函数没有正确检查是否为质数。

这里是您代码的更改:

public class TestPrimaryArray
{
   public static void main(String[] args)  
   {
      Scanner scan = new Scanner(System.in);
      System.out.println("Enter 5 numbers: ");
      int[] numbers = new int[5];
      for(int i = 0; i < numbers.length; i++)
      {
         numbers[i] = scan.nextInt();
         System.out.println("Is " + numbers[i] + " a prime? " + isPrime(numbers[i]));
      }
   }

   public static boolean isPrime(int number)
   {
      for(int i = 2; i < number; i++)
      {
         if(number % i == 0)
            return false
      }
      return true;
   }
}

0

这不是一个检查质数的程序,你正在检查一个数字是奇数还是偶数。如果数组包含至少一个奇数,你就返回 false。

public class TestPrimaryArray {
        public static void main(String[] args)
        {
            Scanner scan = new Scanner(System.in);
            System.out.println("Enter 5 numbers: ");
            int[] numbers = new int[5];
            for(int i = 0; i < numbers.length; i++)
            {
                numbers[i] = scan.nextInt();
                boolean isPrime = PrimeArray(numbers[i]);
                System.out.println("Is " +numbers[i]+ " a prime? " +isPrime);
            }
        }

        public static boolean PrimeArray(int number)
        {
            boolean prime = true;

            if(number %2 == 0)
                prime = false;

            else {
                for(int loop=3;loop < Math.sqrt(number); loop ++)
                    if((number % loop) == 0)
                    {
                        prime = false;
                        break;
                    }
            }
            return prime;
        }
}

不,该函数返回数组中最后一个元素是否为奇数。 - Henry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接