【问题标题】:Arrays and Boolean JAVA数组和布尔 JAVA
【发布时间】:2016-01-30 03:36:48
【问题描述】:

我有这个代码:

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 方法。
  • 一些提示:你真的认为所有奇数都是素数吗?要确定一个数字是否为素数,为什么需要所有其他数字?
  • 为什么每次都将整个数组作为方法PrimeArray 的输入?使用第一个 for 循环来填充数组。使用 primeArray 中的第二个 for 循环打印输出。

标签: java arrays boolean


【解决方案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;
    }
}

【讨论】:

  • “你好,我是‘九号’,我在这里告诉你:我不是素数”。
  • @Henry 更新了答案,因此它可以正确检查数字是否为素数
【解决方案2】:

这不是一个检查素数的程序,你是在检查一个数字是奇数还是偶数。如果数组包含偶数个奇数,则返回 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;
        }
}

【讨论】:

  • “如果数组包含偶数个奇数,则返回 false。”:不,该函数返回数组中的最后一个元素是否为奇数。
【解决方案3】:

素数是一个大于 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;
   }
}

【讨论】:

    【解决方案4】:

    首先,您应该一次测试一个值(因为您返回一个 boolean)。其次,你应该在第一次被整除时短路并返回。否则,您将返回 true,因为您重置了 prime 的值。最后,Java 方法名称以小写字母开头(按照惯例)。而且,您的方法仅测试均匀度。我想你想要类似的东西

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 2013-02-04
      • 2021-05-04
      • 2021-12-07
      • 2013-05-30
      相关资源
      最近更新 更多