在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),循环后的值就没有变化呢?这是我遇到的根本问题.
浙公网安备 33010602011771号