为了账号安全,请及时绑定邮箱和手机立即绑定

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

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 回答

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

1 回复 有任何疑惑可以回复我~
#1

comtrumuke 提问者

你仔细数数,是6个不是5个
2015-06-06 回复 有任何疑惑可以回复我~
#2

comtrumuke 提问者

啊,不好意思,是我大意了,我忘了大于100的情况,这样看来,输出部分也得改了
2015-06-06 回复 有任何疑惑可以回复我~

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--]

);

 

        }

           

    }

}


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信