当前位置: 首页 > 知识库问答 >
问题:

使用气泡排序将(String,Int)的ArrayList按字母顺序排序

颛孙哲
2023-03-14

我试图在sortBabies中按字母顺序排序婴儿,但我无法交换位置,因为错误出现为“ArrayList类型中的方法集(int, Baby)不适用于参数(int, string)”。我将名称1和名称2设置为字符串值,以便我能够比较,但现在我无法交换位置。

import java.util.*;
public class BabyCilent {
static Scanner scanner = new Scanner(System.in);

public static void main(String[] args) {
    // TODO Auto-generated method stub
    ArrayList<Baby> babies = new ArrayList<Baby>();
    
    /*for(int i = 0; i < 4; i++) {
        Baby newBaby = getBaby();
        babies.add(newBaby);
    }*/
    
    //hardcode data so that dont need to keep entering
    
    Baby baby1 = new Baby("d", 4);
    Baby baby2 = new Baby("c", 3);
    Baby baby3 = new Baby("a", 1);
    Baby baby4 = new Baby("b", 2);
    babies.add(baby1);
    babies.add(baby2);
    babies.add(baby3);
    babies.add(baby4);
    
    int choice = 0;
    while(choice != 7){
       System.out.println("1. Print all the baby in the array list");
       System.out.println("2. Calculate the average age for all the baby");
       System.out.println("3. Remove the baby in the array listn");
       System.out.println("4. Add one more baby into the array list");
       System.out.println("5. Sort all the baby in alphabetical order");
       System.out.println("6. Output sorted baby to CSV file");
       System.out.println("7. Exit");
        choice = scanner.nextInt();
        if(choice == 1) {
            printAllBabies(babies);
        } 
        if(choice == 2) {
            calculateAveAge(babies);
        }
        if(choice == 3){
            removeBaby(babies);
        } 
        if(choice == 4){
            addInOneMoreBaby(babies);
        } 
        if(choice == 5) {
            sortBabies(babies);
        }
        if(choice == 6) {
            toCSVFile(babies);
        }
    }   
}

private static void sortBabies(ArrayList<Baby> babies) {
    boolean swap = true;
    while(swap) {
        swap = false;
        for(int i = 1; i < babies.size(); i++) {
            String name1 = babies.get(i-1).getName();
            String name2 = babies.get(i).getName();
            if(name1.compareTo(name2)>0) { //swap the two strings
                babies.set(i-1, name2);
                babies.set(i, name1);
                swap = true;
            }
        }
    }
}

共有1个答案

丌官寒
2023-03-14

您希望更改for循环的内部,以便在交换时将元素设置为child而不是字符串。

您的列表是婴儿的类型,您希望根据婴儿的名字更改列表中的元素。问题是名称的类型是字符串,因此与类型匹配错误。为了解决这个问题,您可以将局部变量更改为Baby而不是String,只需在if中使用getName()来比较它们,如下所示:

for(int i = 1; i < babies.size(); i++) {
    Baby baby1 = babies.get(i-1);
    Baby baby2 = babies.get(i);
    if(baby1.getName().compareTo(baby2.getName())>0) { //swap the two strings
        babies.set(i-1, baby2);
        babies.set(i, baby1);
        swap = true;
    }
}

 类似资料:
  • 我必须创建一个方法,根据电子邮件按字母顺序排序对象的ArrayList,然后打印排序后的数组。我对它排序有困难的部分。我已经研究过它,并尝试使用,但这对我不起作用。我需要一种叫做比较器的东西,但不知道它是如何工作的。我必须使用这些,或者像气泡排序或插入排序之类的东西可以用于这种事情吗? 这是我目前掌握的代码:

  • 问题内容: 我是Java的新手,正在尝试按字母顺序排列术语的arrayList。(一个术语定义为一个字符和一个整数)(例如 我的代码如下: 为什么这不起作用?以及我该如何完成呢?我的arrayList称为术语,填充有Term类型 问题答案: 您在这行代码中遇到的问题。您的课程不是So 的类型,这两个对象将基于哪个属性或条件方法? 您必须使您的类为Comparable类型。和,根据您的需要覆盖该方法

  • 问题内容: 我必须创建一种方法,该方法根据电子邮件按字母顺序对对象的 ArrayList 进行排序,然后打印排序后的数组。我在排序时遇到的麻烦。我已经对其进行了研究并尝试使用,但这对我不起作用。我当时是需要一个称为比较器的东西,但无法弄清楚它是如何工作的。我将不得不使用这些东西吗?还是像气泡排序或插入排序这样的东西可以用于这种事情? 这是我到目前为止的代码: 问题答案: 排序部分可以通过实现cus

  • 嗨,我用冒泡排序查看了其他帖子,但解决方案在我的例子中不起作用:所以算法在我循环时重复了几次之后才起作用。但我如何在不使用输入的情况下做到这一点?这是我的代码,你知道我的意思:

  • 已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {“bed”, “dog”, “dear”, “eye”},按照字母顺序排序并打印,结果应为:dear, dog, eye, bed。 说明 本问题在网上比较常见,但这里尝试用另外一个思路,并且用python来写,与众多用c++的有所不同,且似乎短小了不少。自己感觉比网上参考到的更

  • 问题内容: 我有一个包含人名的字符串arraylist 。我想按字母顺序对arraylist进行排序。 我试图以上述方式对列表进行排序。但是它将排序后的数组显示为: 但我不想使其区分大小写。我想要的结果是: 问题答案: 自定义应该有帮助 或者,如果你使用的是Java 8: