问答详情
源自:7-1 编程练习

为啥输出的东西不对啊

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

        }


    }



提问者:qq_落定_1 2018-08-01 13:35

个回答

  • Amitie
    2018-08-01 16:35:59
    已采纳

    输出了什么东西

  • 慕先生2187431
    2018-08-02 12:36:46

    你在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外面
    }

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

  • weibo_爱你发自内心的微笑_0
    2018-08-02 07:53:53

    i<scores.length; 

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

  • weibo_爱你发自内心的微笑_0
    2018-08-02 07:51:34

    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]);
    }


  • weibo_爱你发自内心的微笑_0
    2018-08-02 07:49:15

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

    }


  • 慕少6939097
    2018-08-01 16:28:02

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