2015-10-29 80 views
3

我有這樣的代碼:陣列和布爾JAVA

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的一個維陣列,然後告訴號是否是素數或沒有。我運行我的代碼,它編譯了一切,但是當我看到結果時,它並沒有給我正確的答案。 這裏是它想告訴我,所有的人,除了20是真正的數字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 

運行的例子。我不知道我做錯了什麼。我該怎麼辦?

+0

爲什麼'PrimeArray'採取一個數組,如果你爲每個輸入調用它?你有沒有注意到,你爲傳入數組的每個數字設置了變量'prime',並在循環之後返回它的值?所以很明顯,它只能返回數組最後一項的結果。所以請重新使用'PrimeArray'方法。 – Tom

+0

一些提示:你真的認爲所有的奇數都是素數?爲了確定一個數字是否爲素數,爲什麼你需要所有其他數字? – Henry

+0

爲什麼你每次都將整個數組作爲輸入方法'PrimeArray'?首先使用循環來填充數組。在primeArray中使用第二個for循環打印輸出。 – yogidilip

回答

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

「你好,我是'九號',我在這裏告訴你:我不是素數。」 – Tom

+0

@Henry更新了答案,以便它正確檢查數字是否爲素數 – Frakcool

+0

@Tom請參閱編輯,修復該問題。 – Frakcool

2

首先,你應該在一個時間來測試一個值(因爲你返回一個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; 
} 
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; 
     } 
} 
+0

「如果數組只包含一個奇數,則返回false」:否,函數返回數組中最後一個元素爲奇數。 – Henry