scanner-Java基础学习中Scanner类nextInt方法问题

问题描述

Java基础学习中Scanner类nextInt方法问题
 import java.util.*;
public class Practice {
    public static String prompt = "How are you? ";
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        System.out.print(prompt);
        //int year=getYourAge(console);
        System.out.println("Your age is "+getYourAge(console));
    }
    public static int getYourAge(Scanner console){
        while(!console.hasNextInt()){
            console.next();
            System.out.println("Not an integer;try again!");
            System.out.print(prompt);
        }
        return console.nextInt();
    }
}

我想问的是,当程序运行到return语句的时候,为什么不等待新的一次输入呢?

这是某次我的运行结果,为什么我输入18之后,到了return语句,不等待
我新的一次输入?平时无论何时运行类似的nextInt()语句都会等待输入的。

我哪里理解出错了?

解决方案

java Scanner类中nextLine()方法与nextInt()等联用时
java中scanner.nextint和nextline的问题
Java基础第七天--Scanner类,String类
----------------------

解决方案二:

什么叫做不等待新的输入?lz的程序执行完一遍就结束了(当读到有符合的int值后)

解决方案三:

console.hasNextInt() 代表要有int型,你输入字母console.hasNextInt()为false,非后就为true,然后你就无限进入循环,直到你输入18后console.hasNextInt()为true,非后为false,跳出循环运行return,这是你程序的运转。重点来了有 Scanner console = new Scanner(System.in)这句,那么你任何一次输入都会放到console中,以前没有输入数字所有console.hasNextInt()就没有int,你输入后就跳出了

解决方案四:

等待了,然后接收到你输入的18后就返回了。

解决方案五:

hasNextInt判断的是输入的是否是int类型,next()是返回字符串。一开始你输入的是精度型的字符串18.7,所以不符合haNextInt的条件,while循环会继续执行。当你输入18的时候那么就是int类型了,hasNextInt返回的就是true,那么就不会进入while循环。

解决方案六:

hasNextInt应该只是判断,没有把scanner往后移一位吧

解决方案七:

你应该多写几种代码,然后前后对比,你把你程序中的console.next();去掉后,你会发现不会等待你再次输入,会一直输出"Not an integer;try again!",原因就是console里有值,console.next()的作用就是取出值,当console里没值时,运行到console.hasNextInt()会阻塞,等待你输入,这样的答案在结合你的问题看看就明白了吧。

时间: 2024-09-06 17:46:03

scanner-Java基础学习中Scanner类nextInt方法问题的相关文章

jar-Java JAR包中的类 父类方法不可见等

问题描述 Java JAR包中的类 父类方法不可见等 场景: 两个jar包分别为a.jar.b.jar.b.jar中引用了a.jar,具体为b.jar中的类B继承了a.jar中的类A. A有两个方法,a.getName(),a.getAge(),B重写了getName方法,未重写getAge方法. 新建了一个Java项目C,**C只引用了b.jar,未引用a.jar**,于是出现了如下两个问题: 1.在C项目中,类B没有getAge方法 2.在C项目中,使用强制类型转换时(如)B b = (B)

java中的类的方法的调用的问题

问题描述 java中的类的方法的调用的问题 新人初学java,有些概念不是很懂,还望各位能帮帮忙,谢谢 在java中,我知道静态方法(变量)可以直接类名.调用,而不用再创建对象, 但是我在学习枚举时遇到这样一个问题: public enum WeekDay{ MON,TUE,WEB,THU,FIR,SAT } public class TestEnum{ public void static main(String [] ,args){ WeekDay today = WeekDay.SAT;

对象-Java基础学习遇见的问题

问题描述 Java基础学习遇见的问题 我是将自定义的对象,存储到了ArrayList集合中,出现下面错误,咋回事啊 多谢各位大神! 解决方案 19行的public拼错了少了b 解决方案二: ArrayList 里面应该加参数吧 ArrayList> list= new ArrayList>();这样定义试试 解决方案三: 黑马程序员 Java基础学习笔记 线程安全问题java基础问题01java基础问题18 解决方案四: 特殊词都带色的,,,拼错了色不对... 解决方案五: 用的什么开发工具啊

java基础学习笔记之反射_java

反射 反射:将类的属性和方法映射成相应的类. 反射基本使用 获取Class类的三种方法: 类名.class 对象名.getClass() Class.forName("要加载的类名") 根据API写就行了,大致流程就是: 用上述三种方式之一获取特定类的Class类,即该类对应的字节码 调用Class对象的getConstructor(Class<?>... parameterTypes)获取构造方法对象 调用是构造方法类Constructor的newInstance(Obj

JAVA基础培训(3),认识类的访问权限描述符

我们熟悉一下类的访问权限描述符,public和默认不写的情况. 类没有private类型 . 我们先注意一下目录结构,我们建了一个otherpackage子目录,用来存放非同一目录 的类 先看我们的主文件 lession3/Lession3.java package lession3; // 注意,我们使用了其它package的类,所以需要import进来 // 注意:路径必须为完整的路径 import lession3.otherpackage.PublicClassOtherPackage;

java基础-Java基础 canvas中加载图片问题

问题描述 Java基础 canvas中加载图片问题 public class GameCanvas extends Canvas implements Runnable{ boolean PaintState=true; Image soccerImage; public GameCanvas(){ try { soccerImage=ImageIO.read(new File(""/image/soccer.jpg""));} catch (IOException

java中一个类的方法与方法之间可以有联系,也可以相互孤立吗

问题描述 java中一个类的方法与方法之间可以有联系,也可以相互孤立吗 java中一个类的方法与方法之间可以有联系,也可以相互孤立吗什么情况要孤立,什么情况要有联系呢 解决方案 看需求.比如说class A{ float get长度() { ... } float get宽度() { ... } float get面积() { return get长度()*get宽度(); }}这里就需要调用另外两个方法 解决方案二: 现在还有人有这玩意嘛 解决方案三: 类的方法主要是对属性的一些操作,方法作用

对象-java源码中一个抽象类初始化方法中包含一个super(),该怎么理解

问题描述 java源码中一个抽象类初始化方法中包含一个super(),该怎么理解 package org.apache.http.params; import java.util.Set; /** * Abstract base class for parameter collections. * Type specific setters and getters are mapped to the abstract, * generic getters and setters. * * @si

Android中TelephonyManager类的方法实例分析_Android

本文实例讲述了Android中TelephonyManager类的方法.分享给大家供大家参考.具体如下: TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法.其中包括手机SIM的状态和信息.电信网络的状态及手机用户的信息.在应用程序中可以使用这些get方法获取相关数据. TelephonyManager类的对象可以通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是有些通讯