关于Java循环变量的问题。。有点急。。!
关注:257 答案:6 mip版
解决时间 2021-01-27 23:44
提问者萬裏夢魂
2021-01-27 20:38
这是Java里的循环:
public clas Demo{
public static void main(String[] args){
int i = 0,j = 0;
for(i;i<100;i++){
j=j++;
System.out.println(j);
}
}
}
下面是C语言里面的循环:
#include int main(int argc,char *argv[]){
int i = 0,j = 0;
for(i;i<100;i++)
j=j++;
printf(j);
return 0;
}
这两段代码我只想表达一个问题,就是把变量j从0循环到100,可是得出来的结果却不一样。难道C语言和Java的语法不一样?希望有高手进来把这两段代码能详尽的解释一番,在下不甚感激。!!!
小弟将我所有分都献上了。。。
想知道这两段程序是怎么走的。最好是有多详细讲多详细吧。。
真的多谢了。。
最佳答案
二级知识专家注定要离开
2021-01-27 21:10
java段中的j=j++;一句有问题,
直接j++就行了,不用在赋值给j了
j++就是一个表达式他的值是0,先得出则个值,在做自加运算,这时候j=1;但它最后才会做赋值运算
即把j++表达式的值0赋给j,所以j又等于0了。
如果是++j的话,则是先做自加运算在得表达式++j的值同样最后赋值给j
全部回答
1楼噯倁酒濃
2021-01-28 01:51
按照你的代码JAVA写的程序会输出100次0,因为输出语句你写到了循环体内部。而C语言代码只会输出一次0,他的输出语句在循环外面,这个看一下大括号的位置就可以明白了,还有C语言的输出应该写成printf("%d",j);
2楼众里寻春风
2021-01-28 00:46
真正的不同点与循环无关(两个循环过程都一样,只是java的大括号把print包含了,c没有包含进去,可能是笔误吧!)
------------------------------------------
真正的不同点在于:j=j++
c语言,会改变j的值,执行完一次之后,j会加1,变成j=1,循环100次之后j=100
java语言,不会改变j的值,(因为这个语句j被修改了两次,第一次是j++;i变为1,最后一次是j=0;所以结果j是0),循环100次之后,j还是不变,还是0
java里面反编译i=i++
0: iconst_0 //0放到栈顶
1: istore_1 //把栈顶的值保存到局部变量1,也就是i中
2: iload_1 //把i的值放到栈顶,也就是说此时栈顶的值是0
3: iinc 1, 1 //注意这个指令,把局部变量1,也就是i,增加1,这个指令不会导致栈的变化,也就是说局部变量1,即i此时为1了。
6: istore_1 //把栈顶的值(0)保存到局部变量1,也就是让i为0了,所以最后i为0
7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
10: iload_1
11: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
14: return
---------------------------
所以,你要j都从0循环到100,应该直接写成j++,而不能写成,j=j++
如:
for(i;i<100;i++){
j++;
System.out.println(j);
}
就不会有问题!
3楼繁华初下,心已空
2021-01-27 23:20
class Test1123
{
public static void main(String[] args)
{
int j=0;
for (int i=0;i<100 ;i++ )
{
j++;
System.out.println(j);
}
}
}
4楼搥噚仟哖
2021-01-27 22:16
首先要看你做什么事情了 你要明白 如果是叠加的话 只能放在外面 声明一次
要是放在内部的话 每次循环都要声明一次
根据实际情况而定 这两种不同的定义方式 可以解决两种问题
给你讲解下两种情况
第一种就说你上面的那种吧 定义在循环体的外面
//我们来实现1-10数字的累加
int num = 0;
for(int i=1;i<=10;i++)
{
//这样就实现了1-10的数字累加 如果你把int num = 0;
//定义到循环体的内部 它每次循环进来初始化的值是0
//那么结果肯定是错误的 所以只能选择定义在外部 当然定义在内部也可以
//但是比定义在外部要复杂
num = num+i;
}
第二种就说你上面的第二种 定义在循环体的内部
//第二个 我们来做一个封装 装10个人的信息
//假如我们有一个student类 里面有id 和name两个属性
vector vec = new vector();
for(int i=0;i<10;i++)
{
student st = new student();//这样就必须在循环的内部进行定义
//每次进来都new 一个新的实例 相当于每次
//都创建一个student
st.setid(i);
st.setname("第"+i+"人");
vec.addelement(st);
}
5楼错过の花开
2021-01-27 21:54
第一步:给i,j赋初始值都是0;
第二步:进入for循环
再循环中
i<100;是循环条件
循环时是这样
第一步:i=0;
第二步:i<100是循环的条件,判断i的值是不是小于100,如果是则进入循环体,执行循环体中的语句;
第三步:执行循环体中的语句
在循环体中
j=j++ 意思是在运行过这个语句后这个j的值+1
printf(j)打印j的值
第四步:执行i++,给i的值加1;则i的值从0=》1;
第五步:在判断i的值是不是小于100;如此循环,一直到i的值大于等于100,循环条件不成立了
循环结束。
所以代码的输出为0,1,2,3,一直到99;
这两段代码是一个意思,就是一个c,一个java
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上信息!
推荐资讯
大家都在看