○ ○ 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日

悬赏问题

  • ¥15 关于#vscode#的问题:ESP32开发板对接MQTT实现小灯泡的开关
  • ¥15 TMC2209串口模式下读取不到寄存器的值串口助手蓝色字体是发过去的消息,绿色字体是收到的消息,第二行发送读取寄存器的指令但是没有读取到寄存器的值串口助手如下图:接线如下图,如何解决?
  • ¥15 高通安卓11提取完整线刷包软件,或者优博讯dt50顺丰刷机包
  • ¥20 C,有个译码器,换了信道就跑不出原来数据
  • ¥15 MIMIC数据库安装问题
  • ¥60 基于JTag协议开发Fpga下载器上位机,哪位大🐂有偿指导?
  • ¥20 全书网Java爬取数据
  • ¥15 怎么获取红包封面的原始链接,并且获取红包封面序列号
  • ¥100 微信小程序跑脚本授权的问题
  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏