如何使用函数在Java中按字母顺序排列字符串

时间:2017-04-24 12:54:31

标签: java

1.5.2

}

这是我的代码,但我不知道我做错了什么。我已经研究了一段时间,我需要一个代码,允许用户输入3个名称,然后按字母顺序对名称进行排序

这个程序的要求是让用户输入3个字符串并使用一个带3个字符串的函数按字母顺序打印它们 - 返回类型应该是void - 这意味着没有任何东西返回到main,函数只会按字母顺序打印出三个单词,应该有6个你需要担心的情​​况(想想if,elseif ... else)。 以下是控制台中示例输出的样子(>表示它在控制台中 - 您实际上看不到这一点):

  

输入第一个小写字符串

     

真棒

     

输入第二个小写字符串

     

     

输入第三个小写字符串

     

寒冷

(在VOID功能中的后续发生)

  

以下是按字母顺序排列的单词

     

真棒

     

     

寒冷

5 个答案:

答案 0 :(得分:1)

如果您真的不被允许使用数组或列表,我希望您的教授让您编写一个冗长的解决方案,以便他可以在以后“揭示”更好的,基于数组或列表的版本。

对于三个项目,确实有六种情况,你可以“只”为每一个写一个if/else条款:

  // case 1 - abc
  if(lessThan(a,b) && lessThan(b,c)) {
     System.out.println(a + " " + b + " " + c);
  }
  // case 2 - acb
  else if(lessThan(a,c) && lessThan(c,b)) {
     System.out.println(a + " " + c + " " + b);
  }
  // case 3 - bac
  else if(lessThan(b,a) && lessThan(a,c)) {
     System.out.println(b + " " + a + " " + c);
  }

......等等,每个abc,acb,bac,bca,cab,cba。为了我自己的理智,我假设存在一个包含lessThan()的{​​{1}}方法 - 但如果你的教授也禁止你编写辅助方法,你可以直接使用a.compareTo(b) < 0

由于问题的措辞,我猜这是预期的 - 它不是实现排序的合理方式,但它可能是构建更好的东西的基础。它还允许您直接计算正在进行的比较,这可能会使初学者深入了解算法的成本。

如果允许使用数组,并且允许使用Java提供的排序例程,则只需将值放入数组中,对其进行排序并打印出来:

compareTo()

答案 1 :(得分:0)

所以你可以使用任何东西,只要你把它放在方法中......

public static void alpha(String fromUser,String fromUser2, String fromUser3){
    String[] sArray = {fromUser, fromUser2, fromUser3};
    Arrays.sort(sArray);
    for (String s : sArray){
       System.out.print(s + " ");
    }
 }

答案 2 :(得分:0)

在java 8中很简单。您可以使用lambda对字符串集合进行排序:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner Alphabet = new Scanner(System.in);
        System.out.println("Input First Name");
        String UserInput = Alphabet.next();
        System.out.println("Input second name");
        String UserInput2 = Alphabet.next();
        System.out.println("Input third name");
        String UserInput3 = Alphabet.next();
        List<String> list = Arrays.asList(UserInput, UserInput2, UserInput3);
        list.sort((String in1, String in2) -> in1.compareTo(in2));
        list.forEach(System.out::println);

    }

答案 3 :(得分:0)

您已经关闭了,但在生成输出之前,您需要将String与两个其他字符串进行比较。一种方法是为三行输出中的每一行创建一个单独的if / else if / else块。例如,这是给出Strings s1,s2,s3的中间行。

SELECT name, capital
FROM world
WHERE LEFT(name,1)=LEFT(capital,1), name <> capital

另一种方法是考虑如何安排三件事的每一种排列。 {abc,acb,bac,bca,cab,cba}。当你只有三件事要安排时,这是可以管理的,但是当你添加更多东西时会变得非常讨厌。

// First Word
. . .
// Second Word
if ( (s1.compareTo(s2) >= 0) && (s1.compareTo(s3) <= 0) ) {
    System.out.println(s1);
} else if ( (s2.compareTo(s1) >= 0) && (s2.compareTo(s3) <= 0) ) {
    System.out.println(s2);
} else {
    System.out.println(s3);
}
// Third Word
. . .

答案 4 :(得分:0)

使用java 8流你可以这样做:

public static void alpha(String fromUser,String fromUser2, String fromUser3) {
    Stream.of(fromUser, fromUser2, fromUser3).sorted().forEach(System.out::println);
}