你可以在不使用return命令的情况下从while循环返回一个字符串吗?

时间:2013-07-11 22:57:49

标签: java while-loop

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

的内容
"3" "1" and "1993"  

输出

"January 1st, 1993"  

如果您输入类似

的内容
"2" "July" and "1992"  

输出

"7/2/1992"  

我已经知道如何使用“case”和while循环来告诉你是否输入错误的东西,但在“day”部分我尝试使用while循环来继续要求你输入一些东西,如果输入不是介于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);  

2 个答案:

答案 0 :(得分: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 parseInt抛出来简化代码,而不是尝试使用正则表达式自行验证代码:

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

答案 1 :(得分:1)

return语句会返回您所在的整个方法中的值。但是您在main,它不能返回值(void)。< / p>

如果要在具有良好值时结束while循环,请使用break语句跳出while循环。然后,控制转到循环结束后的下一个语句。