0

この対話型プログラムには、アレイに対してさまざまな機能を実行するためのオプションを含むメニューがあります。この配列は、「data.txt」というファイルから取得されます。このファイルには、整数が 1 行に 1 つずつ含まれています。明らかに、コード全体を含めていません (長すぎます)。しかし、誰かが配列内の素数を見つける問題を解決してくれることを願っていました。現在、コンソールには素数の配列のアドレス ([I@4a13ccea) が表示されます。どんな提案でも大歓迎です。私のプログラムの一部は以下のとおりです。ありがとう。

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;
}
}
4

2 に答える 2

1

配列をループしてすべての要素をjava.util.Arrays.toString(int[])出力するか、その形式がニーズに合っている場合はメソッドを使用します。

于 2013-03-09T21:44:51.050 に答える
0

2 つのマーク

このように配列を出力すると、内部ではなく配列のアドレスが得られます。

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

この行を反復するループに置き換えますprimes(numbers)

2つ目は、public static boolean prime(int x)関数にこの行があることです

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

これは機能しますが、素数を見つけるためにx / 2まで反復する必要はありません。パフォーマンス上の利点については、x の平方根の方が適しています。

于 2013-03-09T21:55:02.110 に答える