使用foreach方法为啥会有逻辑错误?

来源:7-1 编程练习

comtrumuke

2015-06-06 03:58

int i=0;
for(int a:arr){
i+=((100>=a)&&(0<=a))?1:0;
}
i为什么会是5?

全部代码:
import java.util.Arrays;
public class HelloWorld {

//完成 main 方法
public static void main(String[] args) {
HelloWorld hello=new HelloWorld();
hello.Top3(scores);


}
//成绩数组必须是全局变量,否则HelloWorld类无法调用
static int scores[]={89 , -23 , 64 , 91 , 119 , 52 , 73};
public void Top3(int[] arr)
{
Arrays.sort(arr);

//统计有效成绩个数
int i=0;
for(int a:arr){
i+=((100>=a)&&(0<=a))?1:0;
}

//输出成绩信息
// System.out.println("成绩排名是:"+Arrays.toString(arr));
// System.out.print("有效成绩有"+i+"个,包括:");
/* for(;i>0;i--){ 
System.out.print(arr[arr.length-i]+",");
}*/
System.out.println("");
System.out.println("考试前三名为:");
for(i=3;i>0;i--){ 
System.out.println(arr[arr.length-i]);
}

}
}

写回答 关注

2回答

  • ziom
    2015-06-06 07:17:52
    已采纳

    i+=((100>=a)&&(0<=a))?1:0;

    这行代码中用到了条件运算符,条件运算符的语法如下:

    条件运算符( ? : )也称为 “三元运算符”。
    语法形式:布尔表达式 ? 表达式1 :表达式2
    运算过程:如果布尔表达式的值为 true ,则返回 表达式1 的值,否则返回 表达式2 的值

    由此可以看出((100>=a)&&(0<=a))就是布尔表达式,即a在0到100的范围内就返回true,然后i+1

    那个成绩数组里一眼就可以看出只有五个成绩满足0-100这个条件,所以最后i=5

    comtru...

    啊,不好意思,是我大意了,我忘了大于100的情况,这样看来,输出部分也得改了

    2015-06-06 09:37:58

    共 2 条回复 >

  • comtrumuke
    2015-06-06 10:20:07

    import java.util.Arrays;

    public class HelloWorld {

       

        //完成 main 方法

        public static void main(String[] args) {

           HelloWorld  hello=new  HelloWorld();

           hello.Top3(scores);

           

           

        }

        //成绩数组必须是全局变量,否则HelloWorld类无法调用

    //    static int scores[]={89 , -23 , 64 , 91 , 119 , 52 , 73};

        static int scores[]={-89 , -23 , 64 , 91 , 119 , -52 , -73};

        public void Top3(int[] arr)

        {

            Arrays.sort(arr);

            int i=0;

            for(int a:arr){

                i+=((100>=a)&&(0<=a))?1:0;

            }

            System.out.println("成绩排名是:"+Arrays.toString(arr));

            int length=arr.length-1;

            for(;length>=0;length--){           

            if((100>=arr[length])&&(0<=arr[length]))

            break;

            }

            System.out.print("有效成绩有"+i+"个,包括:");

     

            for(int l1=length;i>0;i--){           

            System.out.print(arr[l1--]+",");

            }

            System.out.println("");

            System.out.println("考试前三名为:");

            for(i=3;i>0;i--){

            if(arr[length]<0){

            System.out.println("只有以上"+(3-i)+"个有效成绩");

            break;

            }

            System.out.println(arr[length--]

    );

     

            }

               

        }

    }


Java入门第一季(IDEA工具)升级版

0基础萌新入门第一课,从Java环境搭建、工具使用、基础语法开始

1165172 学习 · 17581 问题

查看课程

相似问题