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

为啥输出的东西不对啊

public static void main(String[] args) {

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

        HelloWorld hello = new HelloWorld();

        hello.youxiao(scores);

        hello.chengji(scores);

    }

    public void youxiao(int scores[]){

        int i=0;

        for(int score:scores)

        {

            if(score<100&&score>0)

            {

            scores[i]=score;

            i+=1;

            }

        }

    }

    public void chengji(int scores[]){

        Arrays.sort(scores);    

        for(int i=scores.length-3;i<scores.length;i++){

            System.out.println(scores[i]);

        }


    }



正在回答

6 回答

输出了什么东西

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

qq_落定_1 提问者

timeout.我感觉我没错啊,是不是方法里对数组的操作不会同步到主函数啊
2018-08-02 回复 有任何疑惑可以回复我~
#2

Amitie 回复 qq_落定_1 提问者

我把你的代码运行了一下 输出 73 89 91输出是对的只有顺序不对,你改一下顺序就行了
2018-08-02 回复 有任何疑惑可以回复我~
#3

Amitie 回复 qq_落定_1 提问者

你最后循环输出用的i++ 本来你用函数排好序就是{52,64,73,89,91}了 i++当然从左边开始输出啊,你要从右边开始输出,就得用i--。
2018-08-02 回复 有任何疑惑可以回复我~
#4

qq_落定_1 提问者 回复 Amitie

for(int i=scores.length-3;i<scores.length;i++){ System.out.println(scores[i]); 所以我这里是直接输出最后三个啊。直接跳到后面去了的。
2018-08-02 回复 有任何疑惑可以回复我~
#5

Amitie 回复 qq_落定_1 提问者

你可以用你的eclipse运行试试 你的代码我都可以运行成功
2018-08-03 回复 有任何疑惑可以回复我~
查看2条回复

你在main中hello.youxiao(scores);后添加一句System.out.println(Arrays.toString(scores));会发现scores数组已经变成 [89, 64, 91, 52, 73, 52, 73];然后你再执行 hello.chengji(scores)后又会排序,scores数组变成了,[52, 52, 64, 73, 73, 89, 91];所以你最后输出的73,89,91。

你可以将youxiao中的改成,如下,将不符合的数据改成-1,这样排序的时候不会影响正常数值的排序(因为排序是升序,-1都会在数组最前面),而且也不会改变数组的长度,所以你最后可以从数组的最后三个取到正确的值(这样你就不用判断数组的有效值究竟是第几位到第几位,只需从最后三个提取数值就ok)。

for(int score:scores){
    if(score>100||score<0)
        scores[i]=-1;
    i++;   //注意i++在if外面
}

这是按照你的思路改的,但是实际上没有必要写这么麻烦的。。。你可以再自己考虑更好的思路

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

qq_落定_1 提问者

ok 谢了 刚好我也试了试你说的,发现了那个数组后面没变,忽略了数组长度没有变化
2018-08-04 回复 有任何疑惑可以回复我~

i<scores.length; 

而且这句不对,i=4了,i又小于数组长度7,i--。这样就是死循环了,因为 i 永远小于7

0 回复 有任何疑惑可以回复我~
int temp = 0;
int length = scores.length;
for(int i = (length-1); i>=0 && temp<3; i--) {
    if(scores[i]<0 || scores[i]>100)
        continue;
    temp++;
S    ystem.out.println(scores[i]);
}


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

for(int i=scores.length-3;i<scores.length;i++)。这句,数组长度是7,7-3=4。下表从4开始,i--,依次往下输出,输出的元素是下表为[4][3][2][1][0]里的元素了,当然不对了。你看看:


int temp = 0;

for(int i = (length-1); i>=0 && temp<3; i--) {

if(scores[i]<0 || scores[i]>100)

continue;

temp++;

System.out.println(scores[i]);

}


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

if(score<100&&score>0)这里不可以是或 要两者同时满足


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

Amitie

&&不是或
2018-08-01 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为啥输出的东西不对啊

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