A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 仵先进 中级黑马   /  2012-2-19 14:49  /  2947 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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++){
}
}
就什么也不输出了,以前还没看到过将循环的初始化部分提出来,还对程序有影响的

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

11 个回复

倒序浏览
本帖最后由 H07000223 于 2012-2-19 15:07 编辑

对于for循环是不是第一项不能被省略的啊,他貌似不是默认i=0.
如果改成
int i=0;
for(i=0;i<100;i++){
}
加个i=0就可以了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
没见过这么写的,不知道这样写可以不,但是不管怎么样,这样的代码看着就怪怪的
回复 使用道具 举报
没见过这么写的,不知道这样写可以不,但是不管怎么样,这样的代码看着就怪怪的
回复 使用道具 举报
(5*i + 3*j + k/3==100 && i+j+k==100 && k%3==0)

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

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

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

int i=0;
for(i;i<100;i++){
回复 使用道具 举报
我又重新搭建了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
回复 使用道具 举报
b_boywindy 发表于 2012-2-20 22:56
我用各种方式都运行过,可是 没出现什么异常,也没出现什么现象。  上面解释的有道理
对于for循环是不是第 ...

是的,可能我以前用的jdk5的问题
回复 使用道具 举报
邱纲 发表于 2012-2-19 15:19
没见过这么写的,不知道这样写可以不,但是不管怎么样,这样的代码看着就怪怪的 ...

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

经过试验,现在发现不写也行 int i=0;
        for (;i <100; i++) {
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马