在此脚本中,用户必须输入5个数字,并用新行分隔。目的是检查输入是否为整数,如果不是,则理论上应该循环,要求用户输入有效的整数。
第一部分有效-如果用户输入的值不是整数,则会引发错误并要求他们输入有效的整数。但是,如果他们再次输入无效的整数,则会引发异常,我不希望这样做。我希望它循环else语句,直到输入为整数为止。
我尝试在else语句中嵌入一个while循环,但是开始变得混乱,我不知道如何工作。任何帮助将不胜感激。
import java.util.*;
import java.util.concurrent.TimeUnit;
public class NumbersArray
{
int[] numbers = new int[5]; // Defines new array string with length of 5 characters
Scanner sc = new Scanner(System.in);
int length = numbers.length; // Defines length int, calculates how many in numbers int
public void inputToNumbers()
{
for(int i=0; i<length; i++) // Declares i as 0, while i less than length loop runs. Increments each time
{
System.out.println("Input five whole numbers, separated by new lines:" + " (" + (i+1) + "/5)");
String inputtedNums; // Declares inputtedNums string
inputtedNums = sc.nextLine(); // Inserts input
if (inputtedNums.matches("[0-9]+")) // Checks if the input is numbers only
{
numbers[i] = Integer.parseInt(inputtedNums); // Parses string input into integer numbers
}
else
{
System.out.println("Error! You inputted an invalid number, try again." + " (" + (i+1) + "/5)");
inputtedNums = sc.nextLine(); // Takes user input
numbers[i] = Integer.parseInt(inputtedNums); // Parses string input into integer numberS
}
}
}
public void printTheNumbers()
{
for(int x=0; x<length; x++)
{
System.out.println(numbers[x]);
}
}
public static void main(String[] args)
{
NumbersArray na = new NumbersArray();
na.inputToNumbers();
na.printTheNumbers();
}
}
答案 0 :(得分:2)
我认为这会很好。
public void inputToNumbers()
{
for(int i=0; i<length; i++) // Declares i as 0, while i less than length loop runs. Increments each time
{
System.out.println("Input five whole numbers, separated by new lines:" + " (" + (i+1) + "/5)");
String inputtedNums; // Declares inputtedNums string
inputtedNums = sc.nextLine(); // Inserts input
while (inputtedNums.matches("^-?[^\\d]+$")) // Checks if the input is not number
{
System.out.println("Error! You inputted an invalid number, try again." + " (" + (i+1) + "/5)");
inputtedNums = sc.nextLine();
}
numbers[i] = Integer.parseInt(inputtedNums);
// Parses string input into integer numbers
}
}
我担心的是是否允许使用负整数?我包括一个可选的负数案例。在此处查看工作代码:https://ide.geeksforgeeks.org/fzy9sHCGtz
正则表达式测试:https://regex101.com/r/KKrpUu/1
答案 1 :(得分:1)
要扩展我的评论,您可以通过以下方式简化代码:
创建另一个方法只是从控制台输入中读取数字,然后可以再次调用它,直到获得实际数字为止。这将循环替换为递归
public void inputToNumbers()
{
int[] numbers = new int[5];
for(int i=0; i<numbers.length; i++) {
System.out.println("Input five whole numbers, separated by new lines:" + " (" + (i+1) + "/5)");
numbers[i] = readNextnumber();
}
}
private int readNextnumber() {
Scanner sc = new Scanner(System.in);
String inputtedNum = sc.nextLine();
if(!inputtedNum.matches("[0-9]+")) {
System.out.println("Error! You inputted an invalid number, try again.");
return readNextnumber();
} else {
return Integer.parseInt(inputtedNum);
}
}
答案 2 :(得分:0)
由@Bentaye提供,我在else语句中添加了以下内容:
else
{
while(!inputtedNums.matches("[0-9]+"))
{
System.out.println("Error! You inputted an invalid number, try again." + " (" + (i+1) + "/5)");
inputtedNums = sc.nextLine(); // Takes user input
}
numbers[i] = Integer.parseInt(inputtedNums); // Parses string input into integer numberS
}
这很好用。