2013-03-09 102 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

相关问题