○ ○ 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 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂