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