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

第二章节 控制流 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到赋值的临时区
  2. 复制m+1到m++临时区
  3. 1返回m 此时m=1
  4. 此时 m = m(此m是赋值临时区的m)所以 m = 0 m中的1就被覆盖了
posted @ 2022-09-04 23:25  A31  阅读(35)  评论(0编辑  收藏  举报