在while循环中,m++能不能代替m+1

在while循环中,m++能不能代替m+1

 

遇到的问题

package scanner;

import java.util.Scanner;

public class Demo5 {
  public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入数字:");
      double sum =0;
      int m =0;
      while(scanner.hasNextDouble()){
          double x = scanner.nextDouble();
          m = m+1; //问题所在行
          sum=sum+x;
          System.out.println("你输入了第"+m+"个数据.");
      }
      System.out.println("和为:"+sum);
      System.out.println("平均值为:"+(sum/m));
      scanner.close();
  }
}

在上述程序中,我通过while循环,在屏幕输入N个数值,并在过程中输出”当前输入第m个数字“;

在结束后输出“输入数字的总和sum及平均数sum/m;

在使用 m=m+1 运算时,过程中输出m及运算结果没有任何问题;

 

但是网上有人说,在此运算中(m=m++)与(m=m+1)的功效相同;

问题来了,实验结果m始终为0,sum正常运行(废话);

 

经过精简,上述程序可以简化为以下版本(遇到问题相同)


package struct;

import java.util.Scanner;

public class ShunXvDemo1 {
  public static void main(String[] args) {
      Scanner scanner = new Scanner(System.in);
      System.out.println("请输入数字:");
      int m =0;
      while(scanner.hasNextDouble()){
          double x = scanner.nextDouble();
          m = m++; //问题所在行
      }
      System.out.println(m);
  }
}

 

问题小结

 

问题1:是否在while程序中,每进行一次循环,while内的所有程序进行一次运算?

答:是,本题目中的while条件为(在屏幕内输入int数字),结束条件为(在屏幕内输入非int数字)

在符合条件(输入int数字)的情况下,每进行一次循环,while内的所有程序运行了一次。

 

问题2:既然while内进行了循环,为何在while结束后输出m,m的数值依然没有进行任何运算(输出值仍为定义值)?

 


 

 

最好看一下我的实验过程,有利于理解我在遇到这个问题中的脑回路,好发现我的问题

 

 

实验过程

 

1.如下图所示,我在while里分别加入三个变量为(m、a、b),分别进行+1、++、++b运算,并成功进行三次while循环。只有m++的输出结果依然为0

 

 

 

 

 

 

 

 

2.会不会是打印时对m变量抓取对象错了呢?(抓的是m的定义值),那再加一道程序,让c=m,再对c进行输出,结果依然为0

 

 

 

 

 

 


3.受到杨帅启发,我想是不是在sout打印之后,m++才会进行运算,于是先打印m,再让c=m,去输出

 

 

 

 

 

 

 

 

结果还是不行,m值还是没有进行运算。

 

下面两个实验是重点,你一定要看

 

4.这次我试图在while中,把m赋值给另一个变量a,这次成功输出了,但是我的疑惑又加重了

 

 

可以看见,m++这个程序实际一直在正常运行,但为什么让a=m++,就可以正常输出;

让m=m++,输出的就一直是m的定义值呢?

现在(问题1)已经解惑,引出了(问题3)

 

问题3:基本确认问题出在变量的表示上

 

 

 

 

为啥把m赋值给a,每次循环的结果在正常+1;让m=m(m++就等于m=m,再进行m自身+1),循环后的值就没有变化呢?这是我遇到的根本问题.

 

 

posted @ 2022-04-21 12:17  月光下的金毛  阅读(253)  评论(0)    收藏  举报