java-JAVA for循环变量问题

问题描述

JAVA for循环变量问题

为什么j++和++j的输出会天壤之别?求大神指教!

解决方案

我的理解,是否可以解释的通。

解决方案二:

问题的关键在于你的表达式是一个副作用表达式,用它给它自身赋值,存在二义性。
如果你是
x=j++;
或者j = j + 1
都不存在这种二义性。

现在的问题就是看编译器怎么理解了。也就是说作为一个表达式,++是对原先表达式中的j自增,还是对赋值以后的j自增。

解决方案三:

j=++j这句代码,编译器会给出警告The assignment to variable j has no effect。所以,这行代码本质上就是++j操作。
而j=j++;这句代码则能正确赋值,但是它的本质也是j=j;因为在java中的这样的赋值相当于下面的赋值操作:

     temp = j;
     j = j+1 ;
     j = temp;

所以就是这两种结果了。

解决方案四:

在我给你的链接中详细说明了二义性的问题。

解决方案五:

在C99之前的编译器,不支持括号内进行定义变量
2.在C++中是允许定义变量的,其c99之后的编译器亦可以在括号内进行声明变量。

#include<stdio.h>//c++可以编译,但是c不能编译
int main()
{
int sum=0;
for(int i=0;i<=100;++i)//定义并初始化变量i=0.实际编译器运行不起来。但把int i......
答案就在这里:for循环内变量定义问题

解决方案六:

j=j++和j=++j的含义不一样,第一个是先将j的值赋给j在执行++操作,所以还为0

解决方案七:

j = j++赋值给j时是j加1之前的值即为0,所以一直是在0加1之前赋给j,所以j一直是0,而j = ++j是在j加1之后再赋值给j,所以j会逐渐增1,还有就是i的值应该是从0开始增长的吧,你的截图是不是不完全

解决方案八:

最后一句println输出 没有截图

解决方案九:

j=j++:因为“++”的运算级比赋值“=”高,所以先执行j++,但是j++的规则是先把原先的j保存,然后执行+1操作,结果就是把++前的j 赋值给j。
j=++j:原理同上,只是保存的是执行++后的j赋值给j

时间: 2024-08-31 19:23:22

java-JAVA for循环变量问题的相关文章

java的for循环语句

for循环在第一次反复之前要进行初始化.随后,它会进行条件测试,而且在每一次反复的时候,进行某种形式的"步进"(Stepping).for循环的形式如下: for(初始表达式; 布尔表达式; 步进) 语句 无论初始表达式,布尔表达式,还是步进,都可以置空.每次反复前,都要测试一下布尔表达式.若获得的结果是false,就会继续执行紧跟在for语句后面的那行代码.在每次循环的末尾,会计算一次步进. for循环通常用于执行"计数"任务:   //: ListCharact

遍历-求大神指点 关于java 的foreach循环问题

问题描述 求大神指点 关于java 的foreach循环问题 import java.util.Arrays; public class lianxi02 { public static void main(String[] args) { // 定义一个整型数组,保存成绩信息 int[] scores = { 89 72 64 58 93 }; // 对Arrays类对数组进行排序 Arrays.sort(scores); // 使用foreach遍历输出数组中的元素 for (int sco

java嵌套for循环的跳出

问题描述 java嵌套for循环的跳出 for(Object object : objects) { for(Object2 object2 : objects2) { if(x>0)...... } } 怎么才能让if(x>0)时结束object2的循环,并且让object执行下一次循环 !在线等,求救 解决方案 或者加上一个判断变量,但是那样写起来麻烦. 刚才网络不好,多说两句这个方案. boolean shouldcontinue; for(Object object : objects

数字-java基础中循环的问题,请解答

问题描述 java基础中循环的问题,请解答 本应该对输入的数字的数位进行计算的程序,输入后得不到回应,咋么了? 解决方案 while后面的多了":",number大于0时,while会无限循环,去掉":"就好了 解决方案二: while后多了个分号,去掉就可以了,否则number没有变化,形成死循环, 因为while的循环体是后边的一条语句或一个程序段,而有了分号就是循环体只执行了空语句. 解决方案三: while后面的":"号去掉,要不然这个w

Java中for_each循环的使用

最近在看一些和安卓相关的书籍,看到了for_each这种循环结构,这是为了简化java的for循环而改造的一种方便使用的格式. 格式如下: for(数据类型 变量:集合)    语句块 接下来看一个例程: package for_apro; import java.util.*; public class first_for { public static void main(String [] args){ int sum=0; int []nums={1,2,3,4,5,6,7,8,9,0}

浅谈java+内存分配及变量存储位置的区别_java

Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识.一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象) ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用static定义的静态成员 ◆常量池:存放常量 ◆非RAM存储:硬盘等永久

java中为什么有的变量声明而不赋值?

问题描述 java中为什么有的变量声明而不赋值? java中为什么有的变量声明而不赋值?而有的就值,那什么情况下要赋值,什么情况下不赋值 解决方案 比如对象变量,而调用这个变量的构造函数非常耗费时间,所以我们等用到的时候再创建,如果程序运行完都不访问它,就根本不创建,这样可以提高效率. 对于简单变量,比如int float一类的,建议随手给一个初始值. 解决方案二: 你这个问题给你举个例子,你应该就能理解了 例如: int a; 这是只声明不赋值,则只会在内存的栈区创建引用,堆中并无此引用的指向

java读取操作系统环境变量

变量 java读取操作系统环境变量 /**文件名:SysProb.java描述: 取得当前系统变量的程序. java中的System.getProperty只是针对JVM来的,如果要取得系统环境变量,还要用到系统相关的函数作者: 慈勤强Email :cqq1978@Gmail.com**/ import java.util.*;import java.io.*; class SysProb{ //返回当前系统变量的函数,结果放在一个Properties里边,这里只针对win2k以上的,其它系统可

Java跳出多层循环的简单方法

在Java程序中可能使用多层循环来处理复杂的逻辑.但如果要从最内层循环 跳出最外层循环是比较麻烦.下面的代码是一个三层循环的例子: String[] arr= new String[]{"a", "b", "c"}; for(String s: arr) { for(String ss: arr) { for(String sss: arr) { System.out.println(sss); } } } 如果要从第三层循环跳出第一层循环,可以

JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)

Java基础语法(变量.常量.数据类型.运算符与数据类型转换) 1.变量 Java中,用户可以通过指定数据类型和标识符来声明变量,其基本语法为: DataType identifier;  或  DataType identifier = value; 其中,DataType是变量类型,如int/string/char/double/boolean等:identifier是变量名称,即标识符:value就是声明变量的值. 注: a.标识符由数字0-9.大小写字母.下划线.美元符号.人民币符号以及