質問: new BufferedReader(reader); Scanner sc=new Scanner(System.in); int listnumber[]=new int[10]; for(int i=0;i<10;i++){ int number=sc.nextInt(); listnumber[i]=number; } System.out.println("nyuryoku End"); for(int i=0;i<10;i++){ //listのバリューが0だったらそいつを除く。 if(listnumber[i]==0){ listnumber.remove(0); } System.out.println(listnumber[i]); } } } ``` 実行環境 openjdk version "1.8.0_242" OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_242-b08) OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.242-b08, mixed mode)
回答: (1) 質問には、『list型変数listnumber』と書かれていますが、質問のプログラムでは ``` int listnumber[]=new int[10]; ``` となっているので、listnumberは"整数の配列"です。ここで起きている矛盾(思い違い)が問題をややこしくしているのだと思います。 修正方法は2種類あります。 [方法1]一旦配列にデータを入れて、それをlistに変換し、removeメソッドで特定の値を持つ要素を取り除いた後に、listを配列に変換する。 [方法2]ArrayList listnumber = new ArrayList(); というようにlist型のlistnumberを宣言し、最初のfor文で listnumber.addで値を追加していく。その後にremoveメソッドで特定の値を持つ要素を取り除く。 === (2)辞書(java.util.Dictionary)を利用します。 配列に入れていく時に辞書にも追加します、そしで配列に入れる際に辞書に入っているかどうかをチェックして、既に入っている場合は配列に入れません。そうすれば、同じ数字が配列に複数入ることがありません。