0
0

正しい形式で入力されるまで再入力させるメソッド

Posted at

備忘録で書きました。

プログラムについて

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;
}

結論

他メソッドの戻り値をそのまま変数に入れたいときは、右辺にそのメソッドを書く

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0