java Scanner问题

teacher让我专门创建一个方法来接收输入数据并判断类型,但是写完了每次都要输入三次才能继续,这是为什么?

public class Get {
    Scanner sc=new Scanner(System.in);
    public int get(int begin,int over){
        while(!sc.hasNextInt()||sc.nextInt()<begin||sc.nextInt()>over){
            System.out.println("输入格式错误!请重新输入。");
            sc.next();
        }
        return sc.nextInt();
    }
    public double get(double begin,double over){
        while(!sc.hasNextDouble()||sc.nextDouble()<begin||sc.nextDouble()>over){
            System.out.println("输入格式错误!请重新输入。");
            sc.next();
        }
        return sc.nextDouble();
    }
}

这个问题很简单,主要是对nextint和hasnextint的理解不当,hasnextint是检查接下来的数据类型,不会对数据本身造成影响,而nextint会扫描接受字符串,所以你的第一第二次输入都被它接受了,因此你需要输入三次。正确的做法是定义一个变量接收数据,对变量的值进行判断,最后返回该变量

  • 这篇博客: java与c++的不同处(java基础学习之数据类型与运算符02)中的 17.Scanner获得输入 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在c++语言中用cin来进行输入操作

    在java中则需要用scanner获得输入

    import  java.util.Scanner;
    
    
    public class TestScanner {
        public static void main(String[] args) {
            Scanner   scanner =  new Scanner(System.in);
    
            System.out.println("请输入名字:");
            String   name =  scanner.nextLine();
    
            System.out.println("请输入你的年龄:");
            int   age = scanner.nextInt();
    
            System.out.println(name);
            System.out.println(age);
        }
    }