3

スキャンした数字 (x) の下の数字を印刷しようとしています。方法はわかりませんが、これまでのところ、配列の最小数のみを印刷する方法しかありません。最後のループに x を含める方法がわかりません。したがって、x = 13 と入力すると、11、7、5、3、2 と出力されます。

import java.util.Scanner;

class Test {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);


        //1

        int[] num= {2, 3, 5, 7, 11, 13, 17, 19};

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

        System.out.println("Num: " + num[i]);
        }

        // 2
        System.out.print("\n Type a number: ");

        int x = scan.nextInt();

        x = num[0];
        for (int i=1; i>=num.length; i++) {
        if(num[i] < x) {
            x = num[i];
        }
        }
        System.out.println("Numbers below" + x);
    }
}
4

4 に答える 4

6

for ループで何も出力していません。たとえ出力していたとしても、for ループ自体が少し奇妙に見えます。ということi < num.lengthですか?そして、なぜに再割り当てxするのnum[0]ですか? これを試して:

for (int i = 0 ; i < num.length ; i++)
    if (num[i] < x)
        System.out.println(num[i]);

(行は必ず削除してくださいx = num[0]。)

for-each ループを使用することもできます。

for (int a : num)
    if (a < x)
        System.out.println(a);
于 2012-09-17T15:20:40.413 に答える
5

あなたはこれを行うことができます:

System.out.println("Numbers below " + x);
for (int i = 0; i < num.length; i++) {
    if (num[i] < x) {
        System.out.println(num[i]);
    }
}

Listforeach ループを使用したバージョンを次に示します。

    List<Integer> list = new ArrayList<Integer>();
    for (int n: num) {
       if (n < x) {
          list.add(n);
       }
    }
    System.out.println("Numbers below " + x + ": " + list);

出力:

Numbers below 13: [2, 3, 5, 7, 11]
于 2012-09-17T15:20:05.677 に答える
3

問題はこの行System.out.println("Numbers below" + x);にあります。これは if ブロック内の for ループにある必要がありSystem.out.println(num[i]);ますが、num[i] によってアクセスされる配列の要素を出力したいので、これはあなたの選択ではありませんx

あなたが言及した順序で配列内の要素を出力したいと仮定すると.... So if i type x = 13, i want it to print out 11, 7, 5, 3, 2.、次のコードはこれを行います。

import java.util.Scanner;

class Test {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int[] num = { 2, 3, 5, 7, 11, 13, 17, 19 };

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

            System.out.println(num[i]);
        }

        System.out.print("Type a number: ");

        int x = scan.nextInt();
        // Removing the below statement as it makes no sense.
        // x = num[0];

        // Looping in this sense after supposing you need to print the number in
        // reverse order as per the question.

        System.out.println("Numbers below");

        //looping in the reverse order to meet the requirement
        for (int i = num.length-1; i >= 0; i--) {
            if (x > num[i]) {
                System.out.println(num[i]);
            }
        }
        // Moving this line in for loop within if block, but instead of x, we print num[i]
        //System.out.println("Numbers below" + x);

    }

}
于 2012-09-17T15:53:15.043 に答える
1

あなたのコードは問題ないようです。ただし、配列のすべての項目を反復処理する必要があります (数値を入力した後)。

あなたのコードは評価されていますi>=num.length i<num.length、それは前のループと同じであるためです (すべての項目を繰り返します)。

また、配列の最初の位置は 0 であるため、開始値は 0 にする必要があります。

したがって、次のことを行う必要があります。

for (int i=0; i<num.length; i++) {
    if (num[i] < x) { // if this value is lower than the entered value (x)
       System.out.println(num[i]); // then I print it
}

x を再割り当てする必要がないことに注意してください。x は、変更したくない入力値です。配列の各項目がそれよりも低いかどうかを知る必要があります。

于 2012-09-17T15:20:30.827 に答える