はじめまして、javaの初心者です。
ただいま、hit&blowのプログラムを1. 4桁の乱数を作成しなさい。その際、先頭の桁が0にならないよう(3桁にならないように)、また他の数字と同じにならないようにする。
2. 乱数は1文字ずつ配列に格納しなさい。
3. プレイヤーの文字入力は1文字ずつではなく4桁一気に受け取れるようにしなさい。
4. プレイヤーの入力した文字数が4桁以上の場合「桁が多すぎます」と表示し再入力させ、4桁以下の場合は「桁が少ないです」と表示し再入力させなさい。
5. 数字以外のものを受け取った場合は例外処理を行いなさい。
6. 受け取った4桁の値をそれぞれ1文字ずつ配列に格納し、入力した配列の中に同じ数字がないかチェックしなさい。
7. 乱数の配列と照らし合わせて、数字と桁が一致した数を「○Hit」と表示するようにしなさい。
8. 乱数と入力した数字を比べて桁は異なるが同じ数字を含んでいる場合は「○Blow」と表示しなさい。
9. 正解するまでループするようにしなさい。
10. 正解したら「正解です」と表示しなさい。
■PU LS
レベル1:入力回数をカウントし、正解時に出力しなさい。
レベル2:桁数を増やし難易度をあげなさい
レベル3:入力回数制限を10回に指定しなさい。
レベル4:自分が作ったプログラムに勝利しなさい。作成しているのですが、いじっていくうちにどんどんおかしくなり入力ができなくなりました。
プログラムの全体的な改善策を教えていただきたいです。
package round3.test3_7_1;
import java.util.Scanner;
public class CopyOfHi_Low {
/** * @param args */ public static void main(String[] args) { try{ int num = 4; Scanner scan = new Scanner(System.in); int[] answer = new int[num]; int[] user = new int[num]; //桁ごとに数が被らないように、array配列からランダムに一つずつ代入する。 //乱数作成 //0~9までの数字 int []array = {0,1,2,3,4,5,6,7,8,9}; //arrをシャッフルする for(int i=0;i<array.length;i++){ //0~9までの乱数 int ran = (int)(Math.random() * 10); int a = array[i]; array[i] = array[ran]; array[ran] = a; } //シャッフルした中身を表示 for(int zz:array){ System.out.print(zz); } System.out.println(); //上でシャッフルした値の0~4番目の値を取得する for(int i=0;i<answer.length;i++){ answer[i] = array[i]; //もし頭が0だった場合は一番お尻の値を入れる if(answer[i] == 0){ answer[i] = answer[answer.length-1]; } } //答えを表示 System.out.print(answer[0]); System.out.print(answer[1]); System.out.print(answer[2]); System.out.print(answer[3]); System.out.println(); int count = 1; //ここから入力した値の検査。booleanで判定 boolean flag = false; while(flag){ System.out.println("4桁の数字を入力してください"); String input = scan.nextLine(); int length = input.length(); if(text(length,num)){ flag = false; }else{ flag = true; } for(int i = 0;i < num;i++){ for(int j = i+1;j < num;j++){ if(input.charAt(i) == input.charAt(j)){ flag = true; } } }if(flag == true){ System.out.println("入力エラーです"); System.out.println("0から9までの数値を4桁で重複しないように入力してください。"); System.out.println(); continue; } for(int i = 0; i < num;i++){ user[i] = Integer.parseInt(input.substring(i,(i+1))); } int hit = 0; for(int i = 0;i < num;i++){ if(user[i] == answer[i]){ hit++; } } int blow = 0; for(int i = 0;i < num;i++){ for(int j = 0;j < num;j++){ if(user[i] == answer[j]){ blow++; } } } //入力が10回めで表示 if(count == 11){ System.out.println(); System.out.println(count+"回目です。終了します。"); flag = false; //hitが要素数と合致したら表示 }else if(hit == num){ System.out.println(); System.out.println("正解!!" + count +"回目で成功。"); flag = false; //ヒットとブローの数を表示 }else{ System.out.println(hit +"Hit"+ (blow - hit)+ "Blow"); System.out.println(); count++; } } }catch(NumberFormatException o){ System.out.println("数字以外のものが入力されています"); } } public static boolean text(int length,int num){ boolean a = true; if(length > num){ System.out.println("桁が多すぎます。"); a = true; }else if(length < num){ System.out.println("桁が少なすぎます。"); a = true; } return a; } /*public static int hit(int[]user,int[]answer,int num){ int count = 0; for(int i = 0;i < num;i++){ if(user[i] == answer[i]){ count++; } return count; } public static int blow(int[]user,int[]answer,int num){ int count = 0; for(int i = 0;i < num;i++){ for(int j = 0;j < num;j++){ if(user[i] == answer[j]){ count++; } return count; }*/ }

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。