首页 > 其他分享 >第二章节 控制流 01 scanner和m=m++的问题

第二章节 控制流 01 scanner和m=m++的问题

时间:2022-09-05 21:58:41浏览次数:99  
标签:01 Scanner ++ 控制流 System println out scanner

第二章节 控制流 01 scanner和m=m++的问题

用户交互Scanner(扫描器)

用完就要关掉I/O流会占用很多资源

需要创建Scanner对象

Scanner scanner = new Scanner(System.in);

通过Scanner类的next() nextLine()获取输入的字符

hasNexthasNextLine()判断是否有输入的字符

其中的区别是Next是一个单词遇到空格/回车停止,nextLine是一行单词遇到回车停止

案例

package Scanner;

import java.util.Scanner;

public class Demo06 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入字符");

        boolean b = scanner.hasNext();  	//暂停

        System.out.println(b);				//值为true

        System.out.println("===============================================");

        if(scanner.hasNext()){	  		//	再次判断有无输入,因为has不会读走字符,所以现在还是hello world在输入流中
            String str = scanner.next();  	//带走了字符
            System.out.println(str);		//输出到屏幕

            System.out.println("===============================================");

            boolean z = scanner.hasNext();	//判断有无输入此时是world
            String s = scanner.next();    
            System.out.println(s);
            System.out.println(z);

        }

        scanner.close();

    }

}

image-20220904222205700

重输出结果来看当程序运行到hasNext()时会暂停等待输入,而且判断的时候不会读走字符,但是Next()会走字符

next还有很多其他的扩展 包括nextInt(),nextDouble(),nextbyte()...

今日问题

今天在学习的时候发现了一个问题

    public static void main(String[] args) {
        int i = 0;
        for (;i<10;i++){
            int m = 0;
            m=m++;
            System.out.println(m);
        }
    }

他的结果居然是全0的!!!

他的逻辑是这样的 m++并不是在使用完后直接+1,他是先将m的值复制到一个临时区,然后对临时的值+1,最后再返回m。

而代码中的m=m++;

执行步骤是

  1. 先复制m到赋值的临时区为 T;
  2. ++运行,m=m+1 即m=1;
  3. 此时右边的m++已经完全执行完了 现在执行赋值语句 =,最后进行赋值 m = T 所以 m = 0 m中的1就被覆盖了

这个问题参考https://blog.csdn.net/qq_31807385/article/details/83988732

https://blog.csdn.net/blackant2/article/details/125420834

顺序结构

选择结构

循环结构

break&continue

标签:01,Scanner,++,控制流,System,println,out,scanner
From: https://www.cnblogs.com/helloA31/p/16659718.html

相关文章

  • I [NOIP2012]开车旅行 每次往第一或者第二近的点走,求最大比值 倍增算法 set
    链接:https://ac.nowcoder.com/acm/problem/16562来源:牛客网题目描述小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较......
  • Java项目实战-瑞吉外卖day01
    瑞吉外卖开发笔记 笔记内容为黑马程序员视频内容1、软件开发整体介绍软件开发流程角色分工软件环境  2、瑞奇外卖项目介绍项目介绍 ......
  • P5664[CSP-S2019] Emiya 家今天的饭 (dp + 计数)
     P5664[CSP-S2019]Emiya家今天的饭(dp+计数)题目传送门题目大意:给定一个大小为\(n*m\)的表格,其中\(a_{i,j}\)表示用第\(i\)种烹饪方式并且有第\(j\)......
  • [极客大挑战 2019]LoveSQL 1
    很明显这时一道SQL注入的题目这题很简单的SQL注入题目,使用union(联合查询注入),但是缠了我很久为什么呢?因为我们学校的waf,很多可以注入成功的语句,他都会连接被重置,或者被b......
  • vs2019编辑代码闪退解决方法
    错误应用程序名称:devenv.exe,版本:16.11.32802.440,时间戳:0x62e9f741错误模块名称:KERNELBASE.dll,版本:10.0.19041.1949,时间戳:0xa599bd99异常代码:0xe0434352错......
  • oracle数据库sql常用语句01
    --创建表空间createtablespaceitheimadatafile'c:\itheima.dbf'size100mautoextendonnext10m;--删除表空间droptablespaceitheima;--创建用户createuseritheima......
  • [GXYCTF2019]Ping Ping Ping 1
    进入页面发现提示应该是命令执行可以使用|&;等方法绕过尝试查看当前目录下的文件?ip=127.0.0.1|ls发现拥有flag.php和index.php两个文件尝试使用cat查看flag.php......
  • [SUCTF 2019]EasySQL 1
    这个题目搞了我好久,由于本人基础不扎实,试了好多方法,只发现有三种情况Nonono、无返回结果和有返回然后使用了新学习的堆叠注入,得到了数据库名和表名想要查看Flag表的字......
  • blender人物建模笔记01
    blender好久没摸了,也好复习一下这个教程是纯使用点线面操作建模的,没有用到雕刻,雕刻有机会再接触吧,感觉也很好玩。Refr添加参考图片,用边数为8的圆环先把一侧眼睛嘴巴脖子......
  • Revit2018二次开发——外部工具不显示
     安装包下找到D:\aaa\Revit_2018_G1_Win_64bit_dlm\Utilities\SDK\SoftwareDevelopmentKit中的RevitSDK.exe也可以直接通过安装解压这个东西。  找到一个addin文件......