○ ○ 2022-02-09 11:37 采纳率: 66.7%
浏览 52
已结题

关于scanner的一个问题(语言-java)

问题遇到的现象和发生背景

当我第一个输入10.1的时候,第二个输入就会不被执行,直接将10.1输进第二个scanner了,而且第一个10.1不是局部变量吗?为什么可以转到第二个scanner上?

问题相关代码,请勿粘贴截图
import java.util.Scanner;
public class Java1 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int str=0;
        float str1=0.0f;
         System.out.println("请输入一个整数:");
        if(scanner.hasNextInt()){
          str=scanner.nextInt();
            System.out.println("输入的整数为:"+str);
        }else {
            System.out.println("不是整数");
        }
        System.out.println("请输入小数");
        if(scanner.hasNextFloat()){
            str1= scanner.nextFloat();
            System.out.println("输入的小数为"+str1);
        }else {
            System.out.println("输入的不是小数");
        }
    }
}

运行结果10.1
不是整数
请输入小数
输入的小数为10.1

  • 写回答

4条回答 默认 最新

  • a5156520 2022-02-09 12:04
    关注

    因为当你首先输入10.1时,第一个if判断到不是整数,所以执行else部分,然后执行下面的语句,
    然后因为前面只执行了if部分不满足,所以输入的数10.1还在,到第二个fi判断时if条件成立,scanner读取这个小数到str1,所以输出读到的小数。


    问题的关键在于hasNext()和hasNextFloat()进行了输入类型的判断,如果满足则执行if里的读取操作,如果不满足类型则执行else部分。
    这个10.1是存在于输入流里,如果输入流有数据,则可以用相应方法读取到里面的数据。
    而str1和str在main方法里到处都可以访问到。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 2月9日

悬赏问题

  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接
  • ¥15 MATLAB中使用parfor,矩阵Removal的有效索引在parfor循环中受限制
  • ¥20 Win 10 LTSC 1809版本如何无损提升到20H1版本
  • ¥50 win10 LTSC 虚拟键盘不弹出
  • ¥30 微信小程序请求失败,网页能正常带锁访问
  • ¥15 Matlab求解微分方程,如何用fish2d进行预优?