以下のプログラムでは、ユーザーに3文字だけ入力してもらいます。私のプログラムは誤った入力を検出しますが、ユーザーに正しい入力を入力するように継続的に要求しません。たとえば文字の代わりに数字が入力された場合は、代わりに2番目に要求された入力に移動します。
私の質問は、正しい入力が入力されるまでこのプログラムをループさせるにはどうすればよいですか?
また、コードを簡略化できますか?input1 input2とinput3に同じ条件があるので、私がしたことではなく、単一のステートメントで条件を指定する方法はありますか?
public static void main(String[] args)
{
Scanner scnObj = new Scanner(System.in);
System.out.println("enter 3 letters");
String input1 = scnObj.nextLine();
if(!Pattern.compile("[a-zA-Z]*").matcher(input1).matches()){
System.out.println("try again.");
}
else {
System.out.println("enter the 2nd");
}
String input2 = scnObj.nextLine();
if(!Pattern.compile("[a-zA-Z]*").matcher(input2).matches()){
System.out.println("Please try again.");
}
else {
System.out.println("enter the 3rd");
}
String input3 = scnObj.nextLine();
if(!Pattern.compile("[a-zA-Z]*").matcher(input3).matches()){
System.out.println("try again.");
}
scnObj.close();
}
}
次のようにしてください:
import java.util.Scanner;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner scnObj = new Scanner(System.in);
System.out.println("enter 3 letters");
String input1;
do {
input1 = scnObj.nextLine();
if ((!Pattern.compile("[a-zA-Z]*").matcher(input1).matches())) {
System.out.println("try again");
}
} while (!Pattern.compile("[a-zA-Z]*").matcher(input1).matches());
System.out.println("enter the 2nd");
String input2;
do {
input2 = scnObj.nextLine();
if ((!Pattern.compile("[a-zA-Z]*").matcher(input2).matches())) {
System.out.println("try again");
}
} while (!Pattern.compile("[a-zA-Z]*").matcher(input2).matches());
System.out.println("enter the 3rd");
String input3;
do {
input3 = scnObj.nextLine();
if ((!Pattern.compile("[a-zA-Z]*").matcher(input3).matches())) {
System.out.println("try again");
}
} while (!Pattern.compile("[a-zA-Z]*").matcher(input3).matches());
scnObj.close();
}
}
サンプル実行:
enter 3 letters
1
try again
2
try again
a
enter the 2nd
w
enter the 3rd
4
try again
5
try again
p
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加