Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

数字をダブらずに表示するプログラムのエラー(失敗)

javaを大学で勉強中の初心者です。
件名のようなプログラムを書いてみたのですが、数字が一つしか表示されません。
問題点を指摘してください。


import java.io.*;

class Numbering{
    public static void main(String[] args) throws IOException{
        System.out.println("表示する整数の下限と上限を入力してください。");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str1= br.readLine();
        String str2= br.readLine();
        int num1=Integer.parseInt(str2);//上限
        int num2=Integer.parseInt(str1);//下限
        
        int number[]=new int[num1-num2+1];
        for(int i=0;i<number.length;i++){
            number[i]=num1+1;
        }
        
        boolean bl=true;
        int j=0;
        do{
            int num3=(int)(Math.random()*num1)+num2;
            for(int i=0;i<number.length;i++){
                if(number[i]==num3)
                 bl=false;
            }
            number[j]=num3;
            j++;
            if(bl==true)
                System.out.println(num3);
            bl=true;
        }while(j==number.length+1);
    }
}
            

4

回答

3371

閲覧

4件の回答

評価

0

[追加]
while(j==number.length+1);

while(j != number.length);
に修正しましたが、数字がすべて出てきません。(途中で終わってしまう)

評価

0

プログラムは自分が思った通りに動くものではなく、書いた通りに動くものだ。
どこまで思った通りで、どこから思った通りでなくなるのか。
行単位で逐一確認して、その行を見つけるんだよ。
こういう作業を「デバッグ」と言って、プログラムをやる以上避けて通ることはできない作業だ。

評価

10

原因(ひどく単純なミスだ)が分かったら、今度はアプローチを変えることを考えよう。
プログラムは、シンプルで分かりやすく、また何度試しても同じ時間で終了することが望ましいのだが、今のアプローチはそうなっていない。

「ある範囲の数字をダブらず表示する」ということは、「ある範囲のランダムな数字がまだ表示されていなければ表示する」と解釈することもできるが、「ある範囲の数字をランダムに並べ替えて表示する」と解釈することもできよう。

評価

0

「ある範囲の数字をランダムに並べ替えて表示する」解釈で書いたところ、うまくいきました。
ご回答ありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。