首页 > 解决方案 > j在循环中取什么值

问题描述

类中以下行的行为是什么Sort

for (int j = i+1; j > ListPerson.size(); j++) {

我添加System.out.println(j);了查看 所取的值j,但是执行时,没有显示任何值!为什么 Eclipse 不认为ListPerson.get(j)是错误,知道j > ListPerson.size()吗?!

package Tests;

public class Person {
    String nom;
    int age;

    public Person(String nom, int age) {
        this.nom = nom;
        this.age = age;
    }           
}

package Tests;

import java.util.ArrayList;
import java.util.List;

import CompUnivSol2.Etudiant;

public class Sort {

    public static void main(String[] args) {            
        List<Person> ListPerson = new ArrayList<Person>();  
        ListPerson.add(new Person("Paul", 20));
        ListPerson.add(new Person("Coco", 18));
        ListPerson.add(new Person("Eric", 4));


        String temp1;
        int temp2;
        for (int i = 0; i < ListPerson.size(); i++) {           
            for (int j = i + 1; j > ListPerson.size(); j++) {               
                if (ListPerson.get(i).age > ListPerson.get(j).age) {

                    temp1 = ListPerson.get(j).nom;
                    ListPerson.get(j).nom = ListPerson.get(i).nom;
                    ListPerson.get(i).nom = temp1;

                    temp2 = ListPerson.get(j).age;      
                    ListPerson.get(j).age = ListPerson.get(i).age;
                    ListPerson.get(i).age = temp2;
                }
            }
        } 

        for (int i = 0; i < ListPerson.size(); i++) {
            System.out.print("\n N°" + (i + 1) + ": " + ListPerson.get(i).nom + ": " + ListPerson.get(i).age); //le \n pour mettre chaque
                                                                                //établissement dans 1 ligne
        }
    }
}

类中的最后一个循环Sort显示以下内容:

N°1:保罗:20

N°2:可可:18

N°3:埃里克:4

标签: javaarrayslistarraylist

解决方案


因为j > ListPerson.size()在下面一行

for (int j = i + 1; j > ListPerson.size(); j++)

这个循环根本没有被执行。

i = 0-----> j = 1-----> 条件被评估为1 > 3(ie j > ListPerson.size())

如您所见,1 > 3isfalse因此循环不会被执行。

您需要将其更改为

for (int j = i + 1; j < ListPerson.size(); j++)

除了这个问题,你的排序逻辑也不正确。而不是交换人,你只是交换他们的名字。要解决问题,请更换

String temp1;
int temp2;
for (int i = 0; i < ListPerson.size(); i++) {           
    for (int j = i + 1; j > ListPerson.size(); j++) {               
        if (ListPerson.get(i).age > ListPerson.get(j).age) {

            temp1 = ListPerson.get(j).nom;
            ListPerson.get(j).nom = ListPerson.get(i).nom;
            ListPerson.get(i).nom = temp1;

            temp2 = ListPerson.get(j).age;      
            ListPerson.get(j).age = ListPerson.get(i).age;
            ListPerson.get(i).age = temp2;
        }
    }
}

Person temp = null;
for (int i = 0; i < ListPerson.size(); i++) {           
    for (int j = i + 1; j < ListPerson.size(); j++) {  
        if (ListPerson.get(i).age > ListPerson.get(j).age) {
            temp = ListPerson.get(i);
            ListPerson.set(i, ListPerson.get(j));
            ListPerson.set(j, temp);
        }
    }
}

但是,一种优雅的方式是使用Collections.sort这种方式而不是排序方式。

如有任何疑问/问题,请随时发表评论。


推荐阅读