Java 边做边循环问题

Java 边做边循环问题,java,do-while,Java,Do While,因此,我提示用户输入一个介于1-12之间的数字。如果它们不满足要求,循环将再次运行它。我的循环一直有错误 代码 import java.util.Scanner; 公共级HW7{ 公共静态int inputMonth(扫描仪输入){ int输入=Integer.MIN_值; 布尔标志=真; 做{ System.out.println(“输入1-12之间的月份:”); if(在.hasNextInt()中){ input=in.nextInt(); in.nextLine(); 如果(输入>=1&

因此,我提示用户输入一个介于1-12之间的数字。如果它们不满足要求,循环将再次运行它。我的循环一直有错误

代码

import java.util.Scanner;
公共级HW7{
公共静态int inputMonth(扫描仪输入){
int输入=Integer.MIN_值;
布尔标志=真;
做{
System.out.println(“输入1-12之间的月份:”);
if(在.hasNextInt()中){
input=in.nextInt();
in.nextLine();

如果(输入>=1&&input在主方法中使用此代码:

Scanner input = new Scanner(System.in);
inputMonth(input);

您不需要条件,
if(in.hasNextInt())
。此外,应该为每个错误/无效输入重置
标志
,例如,
标志=false
应该放在循环中。我还建议您放置异常处理代码来处理无效输入

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        // Test
        Scanner in = new Scanner(System.in);
        System.out.println(inputMonth(in));
    }

    public static int inputMonth(Scanner in) {
        int input = Integer.MIN_VALUE;
        boolean flag = false;
        do {
            flag = false;
            System.out.print("Enter a month between 1-12: ");
            try {
                input = in.nextInt();
                if (input < 1 || input > 12) {
                    System.out.println("The month must be between 1-12. Please try again.");
                    in.next();
                    flag = true;
                }
            } catch (InputMismatchException e) {
                System.out.println("This is an invalid input. Please try again.");
                in.next();
                flag = true;
            }
        } while (flag);

        return input;
    }
}
另一个示例运行:

Enter a month between 1-12: 2
2
Enter a month between 1-12: w
This is an invalid input. Please try again.
Enter a month between 1-12: 15
The month must be between 1-12. Please try again.
0
Enter a month between 1-12: 3
3
做这样的事

import java.util.Scanner;

public class test { 
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        inputMonth(in);
    }
    public static int inputMonth(Scanner in) {
        int input= Integer.MIN_VALUE; 
        boolean flag=true;
        do{
            System.out.println("Enter a month between 1-12:");
            if(in.hasNextInt()){
                input=in.nextInt();
                in.nextLine();
                if(input>=1 && input<=12) {
                    flag=false;
                    
                }
            }   
        } while(flag);

        return input;
    }
}
import java.util.Scanner;
公共类测试{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
输入月份(单位:个月);
}
公共静态int inputMonth(扫描仪输入){
int输入=Integer.MIN_值;
布尔标志=真;
做{
System.out.println(“输入1-12之间的月份:”);
if(在.hasNextInt()中){
input=in.nextInt();
in.nextLine();

如果(input>=1&&inputif用户输入的内容不是
int
,这将永远循环(如所述)-
hasNextInt
返回
false
,由于IO输入已被读取,每次迭代都将继续返回
false
。如果输入没有
int
,则不会读取输入,循环将重试,但错误的值仍在等待读取。读取一行(例如.nextLine()中的
)在
else
块中(对于
如果hasnetint