对于java中变量发生改变,引起的输出结果改变

最近刚学java时,有一个题目:

打印100到200之间所有的素数

第一判断100

第二次判断101....一直到200

旁边有个同学,写了程序后,发现没有输出结果,她就问我为什么?我当时一看,感觉好像没什么

问题啊,但是运行了,就是什么都没输出,我就郁闷了,当时她的代码是这样的:

public class Text_SuShu
{
 
   /**
    * @param args
    */
   public static void main(String[] args)
   {
     boolean suShu = true;
     
     for (int i = 100; i <= 200; i++)
     {
        for (int j = 2; j< i; j++)
        {
          if(i % j ==0)
          {
          
             suShu = false;
             
             break;
           }         
        }
        if(suShu)
        {
        
           System.out.println(i);
        }
     }
   }
}

我当时是经过调试了,发现了问题,她把 boolean suShu = true; 这个布尔型变量定义在for循环语

句外面,这样suShu的初始值为true,当进入for循环之后,第一次i = 100,因为100符合 if(i % j ==0)的条

件,这样suShu = false的值就变了,break后跳出了循环;在进行下次的循环时,因为suShu的值还是

false,都不符合下面两个if的条件,所以一直到循环结束,suShu的值都还是false,自然也就没有输出值了。

于是,经过修改后代码是这样的:

public class Text_SuShu
{
 
   /**
    * @param args
    */
   public static void main(String[] args)
   {
     
     
     for (int i = 100; i <= 200; i++)
     {
        boolean suShu = true;//位置的改变
        
        for (int j = 2; j< i; j++)
        {
          if(i % j ==0)
          {
       
             suShu = false;
             
             break;
           }         
        }
        if(suShu)
        {
        
           System.out.println(i);
        }
     }
   }
}

这时如果有人说:博主凑字数的吧,这两个代码基本就差不多。我想说的这两个代码确实差不多,

但我不是凑字数,这两个代码只有一个地方不一样,那就是boolean suShu = true;声明的位置不一样,

上面一个代码是在for语句外面,而下面这个代码是在for语句里面,这样只是因为一个在里面一个在外

面,但是执行后的结构完全不一样,下面这个代码能正确输出100~ 200之间所有素数,这是为什么呢?

因为下面这个代码,进入内层for语句后,当有符合if(i % j ==0)这个条件的,suShu值变成flase,

但是内层循环结束的时候,又回到外层循环时,suShu的值又会被置成true,这样就保证了代码能正确执行。

这是我学习java时遇到的一个问题,希望对java初学者有所帮助。

时间: 2024-10-26 02:39:11

对于java中变量发生改变,引起的输出结果改变的相关文章

Java基础---Java中变量使用规则(六)

Java中变量的使用规则 不得不接受的变量小脾气: 1.Java 中的变量需要先声明后使用 2.变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值 3.变量中每次只能赋一个值,但可以修改多次 4.main 方法中定义的变量必须先赋值,然后才能输出 关于 String :表示变量中存储的数据的类型为字符串,后面小节中会详细讲到,小小期待吧~~ 代码: public class HelloWorld{    public static void main(String[] args) { 

java中变量命名和引用变量的一个坑

这次有两个主题,第一个太简单啦,就是java中变量的命名规则,纯记忆性东西.第二个主题,就是讨论一下对象引用变量的一个注意点. 如果你对命名规则很熟啦,就直接看第二个内容吧.(上边的图稍微有点顺序紊乱啊) 一.java中变量的命名规则 大多数语言的命名规则是相似的,只有一些微小的差别. 变量的第一个位置,可以是字母,下划线(_),美元符($) (这个在c/c++,python中是不行的)(注意:不能是数字哦,一想就知道啦为什仫) 其他的位置可以是数字,字母,下划线 不能使用java中的关键字 j

java中变量运算细节 (2)

/* 目的:测试变量的运算方式 结果:byte a, b, c; a = b+c; 或者 a = b+10 形如这种形式的算式, 等式的右边的运算结果默认的都是int型的!因为等式右边有变量, 编译器无法确定变量的内容 ,因为它是变量!所以相加之后得到的int再默认强制转换成byte可能会损失精度. 而形如 a=4+5:这种常量的赋值,虽然 4 和 5 都默认的是int, 但都是常量,它们的值是确定的!所以如果 4+5的值超过了 byte的最大值的范围, 那就会编译出错!(也就是等式右边都是常量

慕课网-安卓工程师初养成-2-7 Java中变量的使用规则

来源:http://www.imooc.com/code/1242 不得不接受的变量小脾气: 1.Java 中的变量需要先声明后使用 2.变量使用时,可以声明变量的同时进行初始化,也可以先声明后赋值 3.变量中每次只能赋一个值,但可以修改多次 4.main 方法中定义的变量必须先赋值,然后才能输出 关于 String :表示变量中存储的数据的类型为字符串,后面小节中会详细讲到,小小期待吧~~ 任务 大家来找茬! 你能找出在编辑器中第 3 行的错误吗? 1 public class HelloWo

java中变量、对象的存储

内容转自网上看到的一篇博文,讲的很不错. 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性.另外,栈数据可以共 享,详见第3点.堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是,由于要 在运行时动态分配

java中变量使用的总结

java中整数默认为int,小数默认为double. float n5=1.3; 这个句子就会报错,应该修改成这样float n5=1.3f; 八大基本类型 变量类型 位数 范围 备注 Byte 8位 -27-------27-1 带符号整数 Short 16位 -215-------215-1 带符号整数 Int 32位 -231-------231-1 带符号整数 Long 64位 -263------263-1 带符号整数 Char 16位 0-----216-1 无符号整数 Float

java中变量的作用域

对于java中的变量来说, 变量大致可以分为全局变量和局部变量, 全局变量的作用域可以说是贯穿整个类,能被同类中的其他函数及函数内的if,while,for等使用,不用初始化, 或者说是不用程序员初始化,有默认初始化值: 局部变量是定义在函数内部的变量,只能在本函数内使用,不能被同类中其他函数使用, 必须自己初始化,系统不给出默认初始化. 写这个的目的是在看和做一些项目的时候总是先声明,然后再在使用的时候指向new, 比如先声明了一个对象User u=null:等到又一个if语句使用的时候再在{

java 中变量的存储与引用

java交换两个变量的值 1.幼儿园版 package tst; public class Test { public static void main(String[] args) { String x = "xx"; String y = "yy"; exchange(x, y); System.out.println(); System.out.println(x+"<->"+y); } private static void

java中变量的使用规则

1.变量必须先声明后使用: 2.可以在声明的同时赋值,也可以先声明,后赋值: 3.变量每次只能赋一个值,但可以修改多次: 4.main方法中的变量必须先赋值,然后才能输出.