###前提・実現したいこと
ここに質問したいことを詳細に書いてください
Javaで4桁の乱数を当てるHitBlowを作っています。5桁以上なら「多すぎます。4桁になるようにしてください。」3桁以下なら、「桁が少ないです。4桁の整数を入力してください。」と表示され,4桁なら以降に続くようにしたいです。
###発生している問題・エラーメッセージ
エラーメッセージ ArrayIndexOutOfBorderException もともと指定した配列の要素数を超えた値を入力されたためエラーが出ました。
###該当のソースコード
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class HitBlow { public static void Ransuu() { //4桁の重複ない乱数を作り値を送るメソッド int[] answer = new int[4]; for (int i = 0; i < answer.length; i++) { Loop: while (true) { answer[i] = (int) (Math.random() * 10); //0~9の数値を入れる for (int j = 0; j < i; j++) { //その前までの数値のどれかとかぶっていたら数値代入からやり直し if (answer[j] == answer[i] || answer[0] == 0) continue Loop; } break; } } //とりあえず出力させています。 for (int x : answer) { System.out.print(x); } } public static void Ketasuu(int n) { //桁数を判定するメソッド int digits = 0; while (n > 0) { digits++; n /= 10; } if (digits > 4) { System.out.println("桁数が多いです。桁数を4桁にしてください"); } else if (digits < 4) { System.out.println("桁数が少ないです。桁数を4桁にしてください"); } } public static void toInt(String[] n, int[] m) { //String型の要素をint型配列に格納するメソッド for (int i = 0; i < n.length; i++) { m[i] = Integer.parseInt(n[i]); } } public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Ransuu(); BufferedReader a = new BufferedReader(new InputStreamReader(System.in)); try { int num = 0; String[] input = new String[4]; int[] input2 = new int[4]; Flag: while (true) { String b = a.readLine(); Ketasuu(num = Integer.parseInt(b)); input = b.split("", 0); toInt(input, input2); } } catch (IOException e) { System.out.println(e); } } }
###試したこと
課題に対してアプローチしたことを記載してください
boolean型のメソッドを作り、メソッド内で桁数を判定したのですが、true falseの2択で両方continue させたいので分岐が足りませんでした。4桁より多い、少ない、4桁の3択で分岐させたいです。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/24 08:20
2017/12/24 09:08 編集
2017/12/24 09:08 編集
2017/12/24 11:16