備忘録で書きました。
プログラムについて
inUserName
メソッド:
1.input
で文字列を受け取り、checkName
メソッドで判定する。
2.checkName
メソッドで判定が通ったらuserName
に代入する。
3.userName
を返す。
checkName
メソッド:
input
の値が「大文字1~10文字以内の文字列」に当てはまらない場合は再入力を要求する。
だめだったやつ
最初に入力した文字が戻り値になってしまうので、checkName
メソッドで再入力しても修正されていない不具合が発生します。
筆者の勘違い:checkName
メソッドの戻り値が自動的にinUserName
にあるinput
の値を上書きすると思っていました
public String inUserName(){
System.out.println("ローマ字(大文字のみ)でユーザー名を入力してください…");
String input = new Scanner(System.in).nextLine();
checkName(input);
-this.userName = input //checkNameの戻り値関係なく3行目で入力した文字列になってしまう
return this.userName;
}
//inputが大文字で1~10文字出ない場合は再入力させるメソッド
public static String checkName(String input) {
while(input.matches("[A-Z]{1,10}") == false) {
System.out.println("大文字で、10文字以内に入力してください。");
input = new Scanner(System.in).nextLine();
}
return input;
}
修正
checkName
メソッドの戻り値をそのままuserName
に代入するようにしました。
public String inUserName(){
System.out.println("ローマ字(大文字のみ)でユーザー名を入力してください…");
String input = new Scanner(System.in).nextLine();
+this.userName = checkName(input); //checkNameメソッドの戻り値がuserNameに代入された
return this.userName;
}
//上記のコードと同じです
public static String checkName(String input) {
while(input.matches("[A-Z]{1,10}") == false) {
System.out.println("大文字で、10文字以内に入力してください。");
input = new Scanner(System.in).nextLine();
}
return input;
}
結論
他メソッドの戻り値をそのまま変数に入れたいときは、右辺にそのメソッドを書く