投稿失礼いたします。javaを学習している初学者です。
javaで作成した数字当てゲームの評価をお願い申し上げます。
もっとこうした方が良い、この使い方は間違っている、こうした方がメモリを消費せずに済むなど、上級者の皆さんが考える意見をお伺いしたいです。
java
1package sample; 2 3public class Baseball { 4 5 6 public static void main(String[] args) { 7 // TODO 自動生成されたメソッド・スタブ 8 9 BaseballJudge bbjg = new BaseballJudge(); 10// ランダムな3ケタの数字を作成する 11 while(bbjg.getListSize() < 3) { 12 13 bbjg.createRandomNum(); 14 15 } 16 17 System.out.println(bbjg.getList()); 18 19// 数字が当たるまでユーザーに数字を入力させる 20 while(bbjg.getStrike() < 3) { 21 System.out.print("重複しない3ケタの数字を入力してください>> "); 22 23// 入力された数字を1文字ずつlistに入れる 24 bbjg.createGivenNumList(); 25 26// 入力された数字に重複がないか調べる 27 if(bbjg.checkDuplicate(bbjg.getList1())) { 28 System.out.println("数字が重複しています"); 29 continue; 30 }else if(bbjg.getList1().size() > 3) { 31 System.out.println("3桁の数字を入力してください"); 32 continue; 33 } 34 35 36 37// 数字も場所も合っていればstrikeを++する 38 bbjg.strikePlus(); 39 40// strikeが3以下の時に、場所は合っていないが数字は合っていればballを++する 41 if(bbjg.getStrike() < 3) { 42 for(int j = 0; j < bbjg.getListSize();j++) { 43 if(bbjg.checkBallPlus(j,bbjg.getList(),bbjg.getList1())){ 44 bbjg.ballPlus(); 45 } 46 } 47 } 48 49 System.out.println(bbjg.getStrike()+"イート"+bbjg.getBall()+"バイトです"); 50 51 52// 完全正解の時の出力 53 if(bbjg.getStrike() == 3) { 54 System.out.println("あたりです"); 55 56 }else { 57 bbjg.resetField(); 58 } 59 60 61 } 62 63 64 65 66 67 68 } 69 70 71 }
java
1package sample; 2 3import java.util.ArrayList; 4import java.util.Arrays; 5import java.util.List; 6import java.util.Random; 7import java.util.Scanner; 8 9public class BaseballJudge { 10 11 private int strike; 12 private int ball; 13 private int machiNum; 14 private List<String> list1; 15 16 BaseballJudge(){ 17 this.strike = 0; 18 this.ball = 0; 19 this.machiNum = 0; 20 } 21 22 Scanner sc = new Scanner(System.in); 23 Random rdm = new Random(); 24 25 List<String> list = new ArrayList<String>(); 26 { 27 28 29} 30// ランダムな3ケタの数字を作成する 31 public void createRandomNum() { 32 int num = rdm.nextInt(10); 33 String num1 = Integer.toString(num); 34 if(list.contains(num1) == false) { 35 list.add(num1); 36 } 37 38 } 39 40// 数字も場所も合っているか確認する 41 public boolean matchNumberAndPlace(int i,List<String> list,List<String>list1) { 42 boolean b = list.get(i).equals(list1.get(i)); 43 return b; 44 } 45 46// 数字も場所も合っていればstrikeを++する 47 public void strikePlus() { 48 for(int i = 0; i < list.size(); i++) { 49 if(matchNumberAndPlace(i,list,list1)) { 50 strike++; 51 machiNum = i; 52 list.set(machiNum, "undefined"); 53 } 54 } 55 56 } 57// 場所は合っていないが数字は合っているか確認 58 public boolean checkBallPlus(int j, List<String> list,List<String> list1) { 59 boolean a = list.contains(list1.get(j)); 60 return a; 61 } 62 63// 場所は合っていないが数字は合っていればballを++する 64 public void ballPlus() { 65 ball++; 66 } 67 68// 入力された数字に重複がないか調べる 69 public boolean checkDuplicate(List<String> list1) { 70 return list1.size() != list1.stream().distinct().count(); 71 } 72 73 74 public void createGivenNumList() { 75 int givenNum = sc.nextInt(); 76 String str = Integer.toString(givenNum); 77 String[] arr = str.split(""); 78 list1 = new ArrayList<>(Arrays.asList(arr)); 79 80 } 81 82 public int getListSize() { 83 return list.size(); 84 } 85 86 public List<String> getList(){ 87 return list; 88 } 89 90 public List<String> getList1(){ 91 return list1; 92 } 93 94 public int getStrike() { 95 return this.strike; 96 } 97 98 public int getBall() { 99 return this.ball; 100 } 101 102// フィールドをリセットする 103 public void resetField() { 104 this.strike = 0; 105 this.ball = 0; 106 } 107 } 108 109コード
teratail は問題を解決するための場所です。
作成されたコードで何が問題となっているのか、それを解決するためにどのようなことをされ、どうなったのか等をご提示ください。
1-1. teratailはサポートセンターではなく、思考するエンジニアの為のQ&Aコミュニティです
https://teratail.com/help/question-tips#questionTips11
要件通り動いていて不具合がなければ基本それで問題なしです。
完全コードレビューは要件を知らない赤の他人にはできませんし、「数字当てゲーム」というタイトルなのに即したようなパッケージやクラス名になってない時点でレビューする気をなくします。
キリがないので、上級者は最初から作り直すと思います。
とりあえずはインデントを揃えるところと、命名をもう少し考えるところから始めたら良いのではないでしょうか。
2 メートル先にボールが届かない人に「俺のピッチングどう?」って言われたら、正直な人以外は困るでしょう?