ArrayList集合错误:我的代码的哪一部分是错误的?

时间:2019-09-12 05:16:25

标签: java arraylist collections

我将需要编写一个Mobile数组列表,执行一些操作,例如添加,删除,更新和显示。但是,在对arraylist中的对象进行排序时,我有些困惑。

我在说和指的是https://beginnersbook.com/2017/08/comparator-interface-in-java/

在驱动器类中

    //Create an arraylist of Mobile
    ArrayList<Mobile> themobile = new ArrayList<>();
    Scanner input = new Scanner(System.in);

    System.out.println("Welcome to Mobile");
    System.out.println("Please select a number in the following: ");

    while (true) {  
        //A list of options 
        System.out.println("1. Diplay the next mobile.");
        System.out.println("2. Display the previous mobile.");
        System.out.println("3. Add a new mobile.");
        System.out.println("4. Remove a new mobile");
        System.out.println("5. Update a mobile.");
        System.out.println("0. Exit");

        //prompt user input
        int choice = input.nextInt();

        switch(choice) {
            case 1:
                //displayNext(themobile);
                break;
            case 2:
                //displayPrevious(themobile);
                break;
            case 3:
                addMobile(themobile);
                break;
            case 4:
                removeMobile(themobile);
                break;
            case 5: 
                updateMobile(themobile);
                break;
            case 0:
                System.out.println("Thank you for using a Mobile arraylist");
                System.exit(0);

        }
    }

    Collections.sort((themobile, new MobileByBrandName());
    System.out.println("Sorted by brand name" + themobile);

    Collections.sort(themobile, new MobileByMoNum());
    System.out.println("Sorted by brand name" + themobile);

    Collections.sort(themobile, new MobileByInS());
    System.out.println("Sorted by brand name" + themobile);

}

移动课堂

public class Mobile implements Comparable<Mobile> {
    private String brandName;
    private int modelNumber;
    private int internalMemoryS;
    private int noOfAvailCameras;

    public Mobile() {
    }

    public Mobile(String brandName, int modelNumber, int internalMemoryS, int noOfAvailCameras) {
        this.brandName = brandName;
        this.modelNumber = modelNumber;
        this.internalMemoryS = internalMemoryS;
        this.noOfAvailCameras = noOfAvailCameras;
    }

    public String getBrandName() {
        return this.brandName;
    }

    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }

    public int getModelNumber() {
        return this.modelNumber;
    }

    public void setModelNumber(int modelNumber) {
        this.modelNumber = modelNumber;
    }

    public int getInternalMemoryS() {
        return internalMemoryS;
    }

    public void setInternalMemoryS(int internalMemoryS) {
        this.internalMemoryS = internalMemoryS;
    }

    public int getNoOfAvailCameras() {
        return noOfAvailCameras;
    }

    public void setNoOfAvailCameras(int noOfAvailCameras) {
        this.noOfAvailCameras = noOfAvailCameras;
    }

    public int compareTo(Mobile m) {
        return this.brandName.compareTo(m.getBrandName());
    }

    public String toString() {
        return "Brand name: " + brandName + "Model number: " + modelNumber + "Internal memory space: " + internalMemoryS + "No of available cameras: " + noOfAvailCameras;
    }
}

每个方法都有自己的类并导入java.util。*;

public class MobileByMoNum implements Comparator<Mobile> {
    public int compare(Mobile m1, Mobile m2) {
        return m1.getModelNumber() - m2.getModelNumber();
    }
}

public class MobileByBrandName implements Comparator<Mobile> {
    public int compare(Mobile m1, Mobile m2) {
        return m1.getBrandName().compareTo(m2.getBrandName());
    }
}

public class MobileByInS implements Comparator<Mobile> {
    public int compare(Mobile m1, Mobile m2) {
        return m1.getInternalMemoryS() - m2.getInternalMemoryS();
    }
}

结果:

TestMobile.java:48: error: unreachable statement
    Collections.sort(themobile, new MobileByBrandName());
    ^
1 error

非常感谢您的帮助和澄清。谢谢

3 个答案:

答案 0 :(得分:1)

此代码

while (true) {  

从不退出,此循环下面的代码无法访问

也许System.exit(0);应该只是打破while循环。

注意 break中的switch不会中断while循环

答案 1 :(得分:0)

while循环之后的代码永远不会到达。您需要编写一些逻辑来打破while循环。解决此问题的一种简单方法是:

int choice = -1;
while (choice != 0) {
    choice = input.nextInt();
    switch (choice) {
        //...other cases
        case 0:
            System.out.println("Thank you for using a Mobile arraylist");
    }
}
Collections.sort(...);
System.out.println(...);

答案 2 :(得分:0)

将这些行放入while循环中

Collections.sort((themobile, new MobileByBrandName());
System.out.println("Sorted by brand name" + themobile);

Collections.sort(themobile, new MobileByMoNum());
System.out.println("Sorted by brand name" + themobile);

Collections.sort(themobile, new MobileByInS());
System.out.println("Sorted by brand name" + themobile);

此外,您还可以使用Java 8及更高版本中的Comparator.comparing来简化比较操作。喜欢:

Comparator<Mobile> comparator = Comparator.comparing(new Function<Mobile,
    @Override
    public String apply(Mobile t) {
        return t.getBrandName();
    }
}).thenComparingInt(new ToIntFunction<Mobile>() {

    @Override
    public int applyAsInt(Mobile t) {
        return t.getModelNumber();
    }
}).thenComparingInt(new ToIntFunction<Mobile>() {
    @Override
    public int applyAsInt(Mobile t) {
        return t.getInternalMemoryS();
    }
});

Collections.sort(themobile, comparator);