在for循环中循环执行else语句?

时间:2018-12-07 13:00:37

标签: java

在此脚本中,用户必须输入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();
    }
}

3 个答案:

答案 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        
        }

这很好用。