黑马程序员技术交流社区

标题: 有趣的java问题 [打印本页]

作者: 仵先进    时间: 2012-2-19 14:49
标题: 有趣的java问题
5文钱买一只公鸡,3文钱买一只母鸡,1文钱可以买3只小鸡,现在要用100文钱买100只鸡,那么各有公鸡,母鸡,小鸡多少只?
public class Num {
    public static void main(String[] args) {
        for (int i = 0; i <100; i++) {
            for (int j = 0; j < 100; j++) {
               for(int k = 0; k <100;k++){
            if(5*i + 3*j + k/3==100 && i+j+k==100 && k%3==0){
                 System.out.println("公鸡:" + i+ "\t\t" +"母鸡"+ j + "\t\t"  + "小鸡" +k);
           }                               
               }                       
          }               
       }
   }
上面这个程序可以实现,但是为什么我将变量i在外面初始化,在最外层循环里这样写:
int i=0;
for(;i<100;i++){
}
}
就什么也不输出了,以前还没看到过将循环的初始化部分提出来,还对程序有影响的
作者: H07000223    时间: 2012-2-19 15:07
本帖最后由 H07000223 于 2012-2-19 15:07 编辑

对于for循环是不是第一项不能被省略的啊,他貌似不是默认i=0.
如果改成
int i=0;
for(i=0;i<100;i++){
}
加个i=0就可以了
作者: 邱纲    时间: 2012-2-19 15:19
没见过这么写的,不知道这样写可以不,但是不管怎么样,这样的代码看着就怪怪的
作者: 最初的理想    时间: 2012-2-19 20:07
没见过这么写的,不知道这样写可以不,但是不管怎么样,这样的代码看着就怪怪的
作者: b_boywindy    时间: 2012-2-20 22:39
(5*i + 3*j + k/3==100 && i+j+k==100 && k%3==0)

在这里 不明白为什k/3,k%3==0;
想了半天 还是不明白。

作者: b_boywindy    时间: 2012-2-20 22:42
哦 ,mygod  知道了   我把一文钱买三只小鸡给看错了 sorry啊  
作者: b_boywindy    时间: 2012-2-20 22:56
我用各种方式都运行过,可是 没出现什么异常,也没出现什么现象。  上面解释的有道理
对于for循环是不是第一项不能被省略,可是怎么能说是他貌似不是默认i=0.因为循环外层已经定义了i 而且也负值了 。
作者: 房宝彬    时间: 2012-2-21 00:06
代码没细看,根据你文字提出的问题,原因就在于  for循环里的 第一个初始值条件必须写,不能不写,确实可以在外面定义变量,但是在for里必须要写变量名,不写肯定会报错.
for循环的执行顺序是  1.初始化.2判断.3执行循环体,4进行自增或自减,... 第二循环,不会在执行1.初始化,直接进行判断.

也就是说,for里的1.初始化只在第一遍循环会执行,

但是不写肯定不行的,你可以这样去写

int i=0;
for(i;i<100;i++){

作者: 仵先进    时间: 2012-2-21 00:08
我又重新搭建了java环境公鸡:
public class Num {

    public static void main(String[] args) {
           int i=0;
        for (;i <100; i++) {
           for (int j = 0; j < 100; j++) {
                for(int k = 0; k <100;k++) {
               if(5*i + 3*j + k/3==100 && i+j+k==100 && k%3==0){
                 System.out.println("公鸡:" + i+ "\t\t" +"母鸡"+ j + "\t\t"  + "小鸡" +k);
           }                              
               }                       
          }               
       }
                                                        }
                       
                        }

改为 for (int i=0;i <100; i++) ;同样输出了下面的
                       
程序输出:
0         母鸡25          小鸡75
公鸡:4         母鸡18          小鸡78
公鸡:8         母鸡11          小鸡81
公鸡:12                母鸡4           小鸡84
作者: 仵先进    时间: 2012-2-21 00:09
b_boywindy 发表于 2012-2-20 22:56
我用各种方式都运行过,可是 没出现什么异常,也没出现什么现象。  上面解释的有道理
对于for循环是不是第 ...

是的,可能我以前用的jdk5的问题
作者: 仵先进    时间: 2012-2-21 00:10
邱纲 发表于 2012-2-19 15:19
没见过这么写的,不知道这样写可以不,但是不管怎么样,这样的代码看着就怪怪的 ...

首先,这么写完全可以,对于这个问题,个人认为这么解决最简单
作者: 仵先进    时间: 2012-2-21 00:13
房宝彬 发表于 2012-2-21 00:06
代码没细看,根据你文字提出的问题,原因就在于  for循环里的 第一个初始值条件必须写,不能不写,确实可以在外 ...

经过试验,现在发现不写也行 int i=0;
        for (;i <100; i++) {




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2