0

我正在互联网上的“oracle academy”等网站上学习java,并使用谷歌搜索如何做某事,我想制作一个简单的java程序,它需要一个数字(天)一个数字或一个词(月)和另一个数字(年),所以如果你输入类似

"3" "1" and "1993"  

它输出

"January 1st, 1993"  

如果你输入类似

"2" "July" and "1992"  

它输出

"7/2/1992"  

我已经知道如何使用“case”和while循环来告诉你是否输入错误,但是在“day”部分我尝试使用while循环来继续要求你输入一些东西,如果输入不是' t 一个介于 1 和 31 之间的数字,但我不能让它使用 return 命令从 while 循环中返回数字,有没有办法在不使用 return 命令的情况下返回数字?编码:

public static void main(String[] args) {  
    String x;  
    Scanner scan = new Scanner(System.in);  
        //day  
        System.out.println("Insert Day");  
        while (1 < 2){  
        x = scan.nextLine();  
        if (x.matches(".*\\d.*")){  
            q = Integer.parseInt(x);  
            if ((0 < q) && (q < 32)){  
                return q;  
        }  
            else {  
            System.out.println("please use a valid number");       
        }  
        }  
        else {  
            System.out.println("please use a number");  
        }  
        }  
        System.out.println(q);  
4

2 回答 2

3

return如果将其重构为单独的函数,则可以使用:

public static int getDay() {
    Scanner scan = new Scanner(System.in);
    System.out.println("Insert Day");
    while (true){  
        line = scan.nextLine();  
        if (line.matches(".*\\d.*")){
            int day = Integer.parseInt(line);  
            if (0 < day && day < 32){  
                return day;  
            } else {  
                System.out.println("please use a valid number");       
            }  
        } else {  
            System.out.println("please use a number");  
        }  
    }
}

public static void main(String[] args) {
    int day = getDay();
    System.out.println(day);  
}

或者你可以使用break

Scanner scan = new Scanner(System.in);
System.out.println("Insert Day");
int day = -1;
while (true){  
    line = scan.nextLine();  
    if (line.matches(".*\\d.*")){
        day = Integer.parseInt(line);  
        if (0 < day && day < 32){
            break;
        } else {  
            System.out.println("please use a valid number");       
        }  
    } else {  
        System.out.println("please use a number");  
    }  
}

或者你可以使用你的while条件:

int day = -1;
Scanner scan = new Scanner(System.in);
System.out.println("Insert Day");
while (day < 1 || day > 31){  
    line = scan.nextLine();  
    if (line.matches(".*\\d.*")){
        day = Integer.parseInt(line);  
        if (day < 1 || day > 31){
            System.out.println("please use a valid number");       
        }  
    } else {  
        System.out.println("please use a number");  
    }
}

此外,您可以通过使用NumberFormatException parseIntthrows 来简化代码,而不是尝试使用正则表达式自己验证它:

int day = -1;
Scanner scan = new Scanner(System.in);
System.out.println("Insert Day");
while (day < 1 || day > 31){
    line = scan.nextLine(); 
    try { 
        day = Integer.parseInt(line);
        if (day < 1 || day > 31){
            System.out.println("please use a valid number");       
        }  
    } catch (NumberFormatException e) {
        System.out.println("please use a number");  
    }
}
于 2013-07-11T23:03:54.450 回答
1

return语句从您所在的整个方法中返回一个值。但是您在 中main,它不能返回值(它是void)。

如果你想while在你有一个好的值时结束循环,那么使用break语句来跳出while循环。然后控制传递到循环结束后的下一条语句。

于 2013-07-11T23:01:02.453 回答