私のループは間違って終了しています、それは私が与えた制限を超えています

2020-05-23 java

私はこの問題を解決しようとしています:与えられた整数N。Nを超えない自然数のすべての二乗を昇順で出力します。

たとえば、N = 50とすると、次のように出力されます=

1
4
9
16
25
36
49
Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int b = 0;

    while (N > b){
        b++;
        int m = b*b;
        System.out.println(m);
       if (N < m){
break;
}

私のコードで私は得ています

1
4
9
16
25
36
49
64

だから、それはちょっとうまくいきますが、何らかの理由で私のint Nを超えています。条件は、N <mの場合、壊れるはずであると述べています。

Answers

あなたがしなければならないことは、条件が満たされている場合はループから抜け出し、そうでない場合は値を出力することです。印刷ステートメントを条件の下に移動して、以下のコードを再配置しました-

if (N < m){
break;
}
System.out.println(m);

あなたの論理は少しずれています、あなたはb + 1 <= Math.sqrt(N)が欲しいです。お気に入り、

Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int b = 0;
while (b + 1 <= Math.sqrt(N)) {
    b++;
    System.out.println(b * b);
}

Related