热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

关于Java循环变量的问题。。有点急。。!关注:257答案:6mip版解决时间2021-01-2723:44提问者萬裏夢魂2021-01-2720:38这是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&#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;

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

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

真的多谢了。。

最佳答案

e6cb1a03ad541b3098697807b7bf1798.png

二级知识专家注定要离开

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

全部回答

e6cb1a03ad541b3098697807b7bf1798.png

1楼噯倁酒濃

2021-01-28 01:51

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

e6cb1a03ad541b3098697807b7bf1798.png

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;

e6cb1a03ad541b3098697807b7bf1798.png

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

}

}

}

e6cb1a03ad541b3098697807b7bf1798.png

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

}

e6cb1a03ad541b3098697807b7bf1798.png

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;

推荐资讯

大家都在看



推荐阅读
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java值传递机制的说明及示例代码
    本文对Java值传递机制进行了详细说明,包括形参和实参的定义和传递方式,以及通过示例代码展示了交换值的方法。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
author-avatar
静待花开0088
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有