【问题标题】:remove and print prime numbers in an array删除并打印数组中的素数
【发布时间】:2015-01-22 12:30:09
【问题描述】:

我有一个班级作业,目标是获取一个数组并通过一种方法运行它,该方法将以相反的顺序打印出数组,然后通过第二种方法运行它以测试数字是否为素数,然后打印没有素数的仍然是相反的顺序数组。我可以得到相反的顺序部分很好,我遇到了质数部分的问题:

public class Driver {

    public static void main(String[] args) {
        // CTORs
        int[] MyArray = { 10, 8, 7, 14, 22, 11 };
        int[] myArray2 = new int[7];
        // METHOD CALLING
        MyArray = reverseOrder(6, MyArray);
        MyArray = primeCheck(MyArray, 6);
        for (int i = 0; i < myArray2.length; i++)
            System.out.println(myArray2[i] + " ");

    }// MAIN


    /*--------------------ARRAY PRIME TEST---------------------*/
    private static int[] primeCheck(int[] myArray, int num) {
        //prime
        boolean prime = true;
        int[] myArray2 = new int[10];
        //test all components of an array
        for (int i = num + 1 ; i >= 0; i++) {
            if (num % i > 0) {
                prime = false;
                System.arraycopy(myArray, 0, myArray2, 0, 4);
                return myArray2;
            }

        }
        return myArray2;
    }// ISPRIME REMOVE
}// CLOSE CLASS

我的输出如下:

11 22 14 7 8 10 0 
0 
0 
0 
0 
0 

我真的很生疏,因为这是长时间休息后返回的第一个任务,因此非常感谢任何指导或帮助。

【问题讨论】:

  • for (int i = num + 1 ; i &gt;= 0; i++) 看起来不正确。您是否尝试过逐步调试代码以找出问题所在?
  • 在您的主要检查中,您不检查数组的任何元素。您将元素总数 (6) 与计数器变量进行比较。

标签: java arrays boolean primes


【解决方案1】:

myArray2 已定义且从未填充值。所以每个元素都是0。

我认为

for (int i = 0; i < myArray2.length; i++)

必须是

for (int i = 0; i < myArray.length; i++)

【讨论】:

    【解决方案2】:

    for (int i = num + 1 ; i &gt;= 0; i++) 肯定有问题。以下是实现目标的一种方法。

    public static void main(String[] args) {
         int[] arr = { 10, 8, 7, 14, 22, 11 };
    
         for(int i = 0; i < arr.length; i++) {
            if(!isPrime(arr[i])) {
                System.out.print(arr[i] + " ");
            }
        }
    
    }
    
    public static boolean isPrime(int num) {
        if(num < 2) return false;
        if(num == 2) return true;
    
        int remainder, divisor;
        divisor = num - 1;
    
        do {
    
            try {
                remainder = num % divisor;
            } catch (ArithmeticException e) {
                return false;
            }
    
            if(remainder == 0) return false;
    
            divisor--;
    
        } while (divisor > 1);
    
        return true;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2010-12-30
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多