Java 不使用array.sort()或compareTo()按字母顺序排列字符串数组?

Java 不使用array.sort()或compareTo()按字母顺序排列字符串数组?,java,arrays,string,sorting,alphabetical,Java,Arrays,String,Sorting,Alphabetical,我在课堂上做了一个练习,你从用户那里取名字并按字母顺序输出。我不允许使用Array.sort()或compareTo()。我似乎已经让它在很大程度上发挥了作用。。。除了输入类似于aaaa的内容外,它会按以下顺序输出: aaa aa a 我真的希望能够按以下顺序输出: a aa aaa 这就是我到目前为止所做的: public static void main(String args[]) throws IOException { BufferedReader key = n

我在课堂上做了一个练习,你从用户那里取名字并按字母顺序输出。我不允许使用
Array.sort()
compareTo()
。我似乎已经让它在很大程度上发挥了作用。。。除了输入类似于
aaaa
的内容外,它会按以下顺序输出:

aaa
aa
a
我真的希望能够按以下顺序输出:

a
aa
aaa
这就是我到目前为止所做的:

public static void main(String args[]) throws IOException {

    BufferedReader key =
    new BufferedReader(new InputStreamReader(System.in));

    System.out.println("Alphabetizing names\n");

    System.out.println("Enter names separated by spaces:");
    StringTokenizer names1 = new StringTokenizer(key.readLine());

    int tokens = names1.countTokens();
    String[] names2 = new String[tokens];
    String y;

    for (int a = 0; a < tokens; a++) {

        names2[a] = names1.nextToken();

    }

    System.out.println("\nSorted names:");

    for (int a = 0; a < tokens; a++) {

        for (int b = a + 1; b < tokens; b++) {

            if(alphabetize(names2[a], names2[b])) {

                y = names2[a];
                names2[a] = names2[b];
                names2[b] = y;

            }

        }

    }

    for (int c = 0; c < tokens; c++) {

        System.out.println(names2[c]);

    }

}

static boolean alphabetize(String a, String b) {

    for(int c = 0; ; c++) {

        if((c == a.length()-1) && (c == b.length()-1)) {

            return false;

        }

        if(c == a.length()-1) {

            return true;

        }

        if(c == b.length()-1) {

            return false;

        }

        if((a.toLowerCase().charAt(c) - b.toLowerCase().charAt(c)) > 0) {

            return true;

        }

    }

}
publicstaticvoidmain(字符串args[])引发IOException{
缓冲读取键=
新的BufferedReader(新的InputStreamReader(System.in));
System.out.println(“按字母顺序排列的名称\n”);
System.out.println(“输入用空格分隔的名称:”);
StringTokenizer names1=新的StringTokenizer(key.readLine());
int tokens=name1.countTokens();
字符串[]名称2=新字符串[标记];
弦y;
for(int a=0;a0){
返回true;
}
}
}

请帮忙!!谢谢大家!

提示1:查看输出。发生了什么事

提示2:根据提示1得出的明显结论。。。查看
按字母顺序排列的方法。。。找出你所看到的原因


元提示:我认为你这里的问题是你没有一个一致的思维模式来决定
字母顺序
应该做什么;i、 e.结果的预期含义。原因有两个:

  • 方法的名称是不透明的。单词“字母顺序”不是一个动词,它的意思与你试图执行的动作对应。链接上说:
  • 你的方法不是做这两件事

    是的。。。方法名非常重要

  • 您没有任何注释来解释该方法应该返回什么。最好的做法是为任何非平凡的方法编写
    javadoc
    注释,该方法与调用该方法的代码之间形成“契约”。在本例中,您需要一条注释,类似于“如果X、Y或Z,此方法返回
    true
    ,否则返回
    false

  • 提示1:查看输出。发生了什么事

    提示2:根据提示1得出的明显结论。。。查看
    按字母顺序排列的方法。。。找出你所看到的原因


    元提示:我认为你这里的问题是你没有一个一致的思维模式来决定
    字母顺序
    应该做什么;i、 e.结果的预期含义。原因有两个:

  • 方法的名称是不透明的。单词“字母顺序”不是一个动词,它的意思与你试图执行的动作对应。链接上说:
  • 你的方法不是做这两件事

    是的。。。方法名非常重要

  • 您没有任何注释来解释该方法应该返回什么。最好的做法是为任何非平凡的方法编写
    javadoc
    注释,该方法与调用该方法的代码之间形成“契约”。在本例中,您需要一条注释,类似于“如果X、Y或Z,此方法返回
    true
    ,否则返回
    false

  • 提示1:查看输出。发生了什么事

    提示2:根据提示1得出的明显结论。。。查看
    按字母顺序排列的方法。。。找出你所看到的原因


    元提示:我认为你这里的问题是你没有一个一致的思维模式来决定
    字母顺序
    应该做什么;i、 e.结果的预期含义。原因有两个:

  • 方法的名称是不透明的。单词“字母顺序”不是一个动词,它的意思与你试图执行的动作对应。链接上说:
  • 你的方法不是做这两件事

    是的。。。方法名非常重要

  • 您没有任何注释来解释该方法应该返回什么。最好的做法是为任何非平凡的方法编写
    javadoc
    注释,该方法与调用该方法的代码之间形成“契约”。在本例中,您需要一条注释,类似于“如果X、Y或Z,此方法返回
    true
    ,否则返回
    false

  • 提示1:查看输出。发生了什么事

    提示2:根据提示1得出的明显结论。。。查看
    按字母顺序排列的方法。。。找出你所看到的原因


    元提示:我认为你这里的问题是你没有一个一致的思维模式来决定
    字母顺序
    应该做什么;i、 e.结果的预期含义。原因有两个:

  • 方法的名称是不透明的。单词“字母顺序”不是一个动词,它的意思与你试图执行的动作对应。链接上说:
  • 你的方法不是做这两件事

    alphabetize (ˈælfəbəˌtaɪz) or alphabetise. vb (tr)
    1. to arrange in conventional alphabetical order
    2. to express by an alphabet
    
    static boolean alphabetize(String a, String b) {
        char ca;
        char cb;
        for(int c = 0; ; c++) {
            ca = a.toLowerCase().charAt(c);
            cb = b.toLowerCase().charAt(c);
            if((c == a.length()-1) && (c == b.length()-1)) {
                return (ca - cb) > 0;
            } else if(c == a.length()-1) {
                return false;
            } else if(c == b.length()-1) {
                return true;
            } else if (ca - cb != 0) { //if are not equals
                return (ca - cb) > 0;
            }      
        }
    }
    
    aaa ccc arc abr ald old mal ald aaaa bbbb aaaa car cro arc dsjd qhjk hdjgsdaj asidasiodu asi