Java 如何在不使用Collections.sort方法的情况下按字母顺序排列此ArrayList?

Java 如何在不使用Collections.sort方法的情况下按字母顺序排列此ArrayList?,java,string,arraylist,swap,Java,String,Arraylist,Swap,这是我为了好玩而做的学校作业。在本作业中,我应该在ArrayList中插入单词,然后手动停止ArrayList,然后程序应该按字母顺序排列它。但问题是,每个教程都告诉我使用Collections.sort方法或其他方法,但我们在课堂上还没有学会,所以我们显然不打算使用它。此外,本作业的挑战是对1个ArrayList中的所有内容进行排序,而不是从ArrayList中提取单词,按字母顺序排列单词,然后将字母顺序排列的单词插入第二个ArrayList。有人能帮我解决这个问题吗?我没有在字母顺序部分写任

这是我为了好玩而做的学校作业。在本作业中,我应该在ArrayList中插入单词,然后手动停止ArrayList,然后程序应该按字母顺序排列它。但问题是,每个教程都告诉我使用Collections.sort方法或其他方法,但我们在课堂上还没有学会,所以我们显然不打算使用它。此外,本作业的挑战是对1个ArrayList中的所有内容进行排序,而不是从ArrayList中提取单词,按字母顺序排列单词,然后将字母顺序排列的单词插入第二个ArrayList。有人能帮我解决这个问题吗?我没有在字母顺序部分写任何东西,因为我不知道从哪里开始。多谢各位

import java.util.*;

public class LexiHeaven {

    public static void main(String[] args) {

        ArrayList<String> words = new ArrayList<String>();
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter a word into the Array (enter stop if you want to stop):");
        String w = sc.nextLine();

        while (!w.equals("stop")) {
            words.add(w);
            System.out.println("Please enter a word into the Array (enter stop if you want to stop):");
            w = sc.nextLine();
        }

        System.out.println(words);
        System.out.println("Alphabetize the ArrayList:");

        String temp = "";
        for (int i = 0; i < words.size(); i++) {
            for (int j = i + 1; j < words.size(); j++) {
                if (words.get(i).compareTo(words.get(j)) > 0) {
                    temp = words.get(i);
                    words.set(i, words.get(j));
                    words.set(j, temp);
                }
            }
        }
        System.out.println(words);
    }
}
import java.util.*;
公共类lexihaven{
公共静态void main(字符串[]args){
ArrayList words=新的ArrayList();
扫描仪sc=新的扫描仪(System.in);
System.out.println(“请在数组中输入一个单词(如果要停止,请输入stop):”;
字符串w=sc.nextLine();
而(!w.equals(“stop”)){
加上(w);
System.out.println(“请在数组中输入一个单词(如果要停止,请输入stop):”;
w=sc.nextLine();
}
System.out.println(字);
System.out.println(“按字母顺序排列数组列表:”);
字符串temp=“”;
for(int i=0;i0){
temp=单词。get(i);
words.set(i,words.get(j));
词.集(j,temp);
}
}
}
System.out.println(字);
}
}

看来我无法在评论中很好地解释自己,所以我会让我的代码替我说话

实现冒号排序的循环应如下所示:

字符串温度;
for(int i=0;i
请注意,由于您正在进行比较,因此这会按降序对列表进行排序,即

if(words.get(i).compareTo(words.get(j))<0{
如果需要升序,请将
<0
更改为
>0


我试图解释,在我的中,您没有在循环中为局部变量
temp
赋值。

看起来我无法在注释中很好地解释自己,所以我会让我的代码替我说话

实现冒号排序的循环应如下所示:

字符串温度;
for(int i=0;i
请注意,由于您正在进行比较,因此这会按降序对列表进行排序,即

if(words.get(i).compareTo(words.get(j))<0{
如果需要升序,请将
<0
更改为
>0


在我的示例中,我试图解释您没有在循环中为局部变量
temp
赋值。

让我们看看您编写的代码:

String temp;
for (int i = 0; i < words.size(); i++) {
  for (int j = i + 1; j < words.size(); j++) {
    if (words.get(i).compareTo(words.get(j)) < 0) {
      words.set(i, temp);
      words.set(i,j);
      words.set(j, temp);
    }
  }
}
这里有几个问题:

  • 您可能想要反转该条件,因为您希望(z,a)变成(a,z),而不是相反
  • 您从未将值分配给
    temp
    ,因此此代码实际上会使用
    null
    值“损坏”您的列表
  • 您有两行写入同一索引,因此第一行
    words.set(i,temp)
    基本上“不做任何事情”,即使它做了正确的事情
  • 让我们解决这个问题:交换任何数组或列表中的两个元素需要第三个临时占位符。将要交换的两个元素之一放入临时占位符,然后用另一个元素的值覆盖该元素,然后用临时占位符的值覆盖覆盖覆盖元素:

  • 从列表(a,b)开始,交换元素0和1的愿望,以及一些临时变量
  • 设置temp=list[0],因此我们现在有
    list=(a,b),temp=a
  • 用列表[1]覆盖列表[0],因此我们现在有
    list=(b,b),temp=a
  • 用临时值覆盖列表[1],因此我们现在有
    list=(b,a),temp=a
  • 您正在使用
    temp
    变量和ArrayList代码,因此:

    String temp;
    for(...) {
      for(...) {
       if (...) {
         temp = words.get(i);
         words.set(i, words.get(j));
         words.set(j, temp);
       }
      }
    }
    

    让我们看看您编写的代码:

    String temp;
    for (int i = 0; i < words.size(); i++) {
      for (int j = i + 1; j < words.size(); j++) {
        if (words.get(i).compareTo(words.get(j)) < 0) {
          words.set(i, temp);
          words.set(i,j);
          words.set(j, temp);
        }
      }
    }
    
    这里有几个问题:

  • 您可能想要反转该条件,因为您希望(z,a)变成(a,z),而不是相反
  • 您从未将值分配给
    temp
    ,因此此代码实际上会使用
    null
    值“损坏”您的列表
  • 您有两行写入同一索引,因此第一行
    words.set(i,temp)
    基本上“不做任何事情”,即使它做了正确的事情
  • 让我们解决这个问题:交换任何数组或列表中的两个元素需要第三个临时占位符。将要交换的两个元素之一放入临时占位符,然后用另一个元素的值覆盖该元素,然后用临时占位符的值覆盖覆盖覆盖元素:

  • 从列表(a,b)开始,交换元素0和1的愿望,以及一些临时变量
  • 设置temp=list[0],因此我们现在有
    list=(a,b),temp=a
  • 用列表[1]覆盖列表[0],因此我们现在有
    list=(b,b),temp=a
  • 用临时值覆盖列表[1],因此我们现在有