2013-03-09 71 views
0

在此交互式程序中,您將找到一個菜單,其中包含用於在陣列上執行不同功能的選項。該數組來自一個名爲「data.txt」的文件。該文件包含整數,每行一個。顯然,我沒有包括整個代碼(這太長了)。然而,我希望有人能夠幫助我解決在數組中找到素數的問題。現在,控制檯打印數組的素數地址([I @ 4a13ccea))。歡迎任何建議。我的部分程序如下。謝謝。將整數存儲到數組中,並查找素數JAVA

public static void main(String[] args) throws FileNotFoundException { 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Welcome to Calculation Program!\n"); 
    startMenus(sc); 

} 

private static void startMenus(Scanner sc) throws FileNotFoundException { 
    while (true) { 
     System.out.println("(Enter option # and press ENTER)\n"); 

     System.out.println("1. Display the average of the list"); 
     System.out.println("2. Display the number of occurences of a given element in the list"); 
     System.out.println("3. Display the prime numbers in a list"); 
     System.out.println("4. Display the information above in table form"); 
     System.out.println("5. Save the information onto a file in table form"); 
     System.out.println("6. Exit"); 

     int option = sc.nextInt(); 

     sc.nextLine(); 

     switch (option) { 
      case 1: 
       System.out.println("You've chosen to compute the average."); 
       infoMenu1(sc); 
       break; 
      case 2: 
       infoMenu2(sc, sc); 
       break; 
      case 3: 
       infoMenu3(sc); 
       break; 
      case 4: 
       infoMenu4(sc); 
       break; 
      case 5: 
       infoMenu5(sc); 
       break; 
      case 6: 
       System.exit(0); 
      default: 

       System.out.println("Unrecognized Option!\n"); 
     } 

    } 
} 
private static void infoMenu3(Scanner sc) throws FileNotFoundException { 
    File file = new File("data.txt"); 
    sc = new Scanner(file); 

    int[] numbers = new int[100]; 

    int i = 0; 

    while (sc.hasNextInt()) { 
     numbers[i] = sc.nextInt(); 
     ++i; 
    } 

    for (int j = 0; j < i; ++j) { 
     System.out.print("The numbers in the file are: " + numbers[j] + " "); 
    } 
} 
public static boolean prime(int x) { 
    boolean answer = true; 

    for (int i = 2; i <= x/2; i = i + 1) { 
     if (i != x) { 
      if (i % x == 0) { 
       answer = false; 
      } 
     } 
    } 

    return answer; 
} 

public static int[] primes(int[] numbers) { 
    int primesCount = 0; 

    for (int i : numbers) { 
     if (prime(i)) { 
      primesCount = (primesCount + 1); 
     } 
    } 

    if (primesCount == 0) { 
     return null; 
    } 

    int[] result = new int[primesCount]; 
    int index = 0; 

    for (int i : numbers) { 
     if (prime(i)) { 
      result[index] = i; 
      index = index + 1; 
     } 
    } 

    return result; 
} 
} 
+0

也許你想返回'result [index]'而不是'result'。 – Maroun 2013-03-09 21:47:16

+0

返回'result [index]'將我的方法返回類型更改爲'int'。我希望它返回'int []'。 – lancer 2013-03-09 21:49:52

+0

您應循環'數字'併爲每次迭代打印'primes(數字)',但您應該返回'result [index]'而不是..(如果我沒有誤解您的話) – Maroun 2013-03-09 21:55:58

回答

1

遍歷您的陣列和打印每一個元素,或者使用java.util.Arrays.toString(int[])方法,如果其格式符合您的需求。

+0

我可以打印每個元素或將數組轉換爲字符串,但是會打印包含非素數的每個整數。而且我的素數方法無法從字符串中找到素數... – lancer 2013-03-09 21:49:16

+0

在質數數組上調用此方法。即替換'System.out.println(「文件中的素數是:」+ primes(數字));''通過'System.out.println(「文件中的素數是:」+ Arrays.toString(primes( ');' – 2013-03-09 21:55:16

+0

我改變了代碼,所以它會打印每一個元素,但我不知道如何評估每個元素單獨測試素數 – lancer 2013-03-09 22:13:16

0

兩個標記

如果你打印一個這樣的數組,你會得到的數組,而不是內部地址。

System.out.println("The primes in the file are: " + primes(numbers)); 

替換一個循環遍歷primes(numbers)

第二個是,在你的public static boolean prime(int x)功能這一行,你這行

for (int i = 2; i <= x/2; i = i + 1) 

雖然這個工程,要找到一個黃金喲做不需要重複,直到x/2。對於性能好處x的平方根更適合。

+0

我改變了代碼,所以它會打印每一個元素,但我不知道如何評估每個元素單獨測試素數 – lancer 2013-03-09 22:14:52

+0

因爲這看起來像一個任務,我不想給一個完整的代碼。 1-)讀取數組的整數(完成)2-)int [] myPrimes =素數(數字)3-)遍歷myPrimes並輸出結果 – 2013-03-09 22:19:18

相關問題