java循环变量_关于Java循环变量的问题。。有点急。。!

关于Java循环变量的问题。。有点急。。!

关注:257  答案:6  mip版

解决时间 2021-01-27 23:44

e6cb1a03ad541b3098697807b7bf1798.png

提问者萬裏夢魂

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的语法不一样?希望有高手进来把这两段代码能详尽的解释一番,在下不甚感激。!!!

小弟将我所有分都献上了。。。

想知道这两段程序是怎么走的。最好是有多详细讲多详细吧。。

真的多谢了。。

最佳答案

e6cb1a03ad541b3098697807b7bf1798.png

二级知识专家注定要离开

2021-01-27 21:10

java段中的j=j++;一句有问题,

直接j++就行了,不用在赋值给j了

j++就是一个表达式他的值是0,先得出则个值,在做自加运算,这时候j=1;但它最后才会做赋值运算

即把j++表达式的值0赋给j,所以j又等于0了。

如果是++j的话,则是先做自加运算在得表达式++j的值同样最后赋值给j

全部回答

e6cb1a03ad541b3098697807b7bf1798.png

1楼噯倁酒濃

2021-01-28 01:51

按照你的代码JAVA写的程序会输出100次0,因为输出语句你写到了循环体内部。而C语言代码只会输出一次0,他的输出语句在循环外面,这个看一下大括号的位置就可以明白了,还有C语言的输出应该写成printf("%d",j);

e6cb1a03ad541b3098697807b7bf1798.png

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);

}

就不会有问题!

e6cb1a03ad541b3098697807b7bf1798.png

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);

}

}

}

e6cb1a03ad541b3098697807b7bf1798.png

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);

}

e6cb1a03ad541b3098697807b7bf1798.png

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

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

点此我要举报以上信息!

推荐资讯

大家都在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值