阅读三个单词并按字典顺序排序

时间:2013-10-20 02:56:18

标签: java

我正在尝试创建一个程序,要求用户键入三个单词并按字典顺序对它们进行排序。

实施例

  
      
  • 输入三个以空格分隔的单词:
  •   
  • 梨橙苹果
  •   
  • 苹果
  •   
  • 橙色
  •   
  •   

程序工作正常(如果我尝试上面的例子),除了我将在下面显示的一种组合示例。

实施例

  
      
  • 输入三个以空格分隔的单词:
  •   
  • 橙苹果梨
  •   
  • 苹果
  •   
  •   
  •   

程序正在跳过第一个单词(橙色),如果它应该出现在三个单词的中间。

我认为这行代码正在影响该程序,因为它表示"这个赋值永远不会被使用"但我还不确定如何修复它,因为我还是一名入门Java学习者。

  
      
  • middle = firstWord;
  •   

由于该线未使用,这就是Pear出现两次的原因。

import java.util.*;
public static void main(String[] args) 
{

Scanner wordInput = new Scanner(System.in);
String firstWord;
String secondWord;
String thirdWord;


System.out.println("Enter three words separated by spaces: ");

firstWord = wordInput.next();
secondWord = wordInput.next();
thirdWord = wordInput.next();


String top = firstWord;
String bottom = firstWord;
if( top.compareTo(secondWord) > 0) 
{ 
top = secondWord; 
} 
if( top.compareTo(thirdWord) > 0) 
{ 
top = thirdWord; 
} 
if( bottom.compareTo(secondWord) < 0) 
{ 
bottom = secondWord; 
} 
if( bottom.compareTo(thirdWord) < 0) 
{ 
bottom = thirdWord; 
}   
String middle;
if( !firstWord.equals(bottom) && !firstWord.equals(top) ) 
{ 
middle = firstWord; 
} 
if( !secondWord.equals(bottom) && !secondWord.equals(top) ) 
{ 
middle = secondWord; 
} 
else 
{ 
middle = thirdWord; 
} 

System.out.println( top ); 
System.out.println( middle ); 
System.out.println( bottom ); 


}
}

有没有人我错过了什么或做错了什么? :( 拜托,谢谢你的帮助!

3 个答案:

答案 0 :(得分:3)

您可以通过 TreeSet

执行此操作,而不是添加这么多条件
public static void main(String[] args) throws FileNotFoundException, IOException{
        Scanner wordInput = new Scanner(System.in);
        String firstWord;
        String secondWord;
        String thirdWord;


        System.out.println("Enter three words separated by spaces: ");

        firstWord = wordInput.next();
        secondWord = wordInput.next();
        thirdWord = wordInput.next();

        TreeSet<String> treeSet=new TreeSet<>();

        treeSet.add(firstWord);
        treeSet.add(secondWord);
        treeSet.add(thirdWord);
        for(String s:treeSet){
            System.out.println(s);
        }
    }

如果你有重复:

    Map<String, Integer> treeMap=new TreeMap<>();
    if(treeMap.containsKey(firstWord)){
        Integer i=treeMap.get(firstWord);
        i++;
        treeMap.put(firstWord, i);
    }
    else{
        treeMap.put(firstWord, 1);
    }
    if(treeMap.containsKey(secondWord)){
        Integer i=treeMap.get(secondWord);
        i++;
        treeMap.put(secondWord, i);
    }
     else{
        treeMap.put(secondWord, 1);
    }
    if(treeMap.containsKey(thirdWord)){
        Integer i=treeMap.get(thirdWord);
        i++;
        treeMap.put(thirdWord, i);
    }
     else{
        treeMap.put(thirdWord, 1);
    }
    for(String s:treeMap.keySet()){
        int k=treeMap.get(s);
        while(k>0){
            System.out.println(s);
            k--;
        }
    }

答案 1 :(得分:0)

您在选择else字词时遗漏了middle:第一个if正确地为Orange分配if,但最后else / { {1}}重新分配Pear

以下是修复代码的方法:

if( !firstWord.equals(bottom) && !firstWord.equals(top) ) {
    middle = firstWord; 
} else if( !secondWord.equals(bottom) && !secondWord.equals(top) ) {
    middle = secondWord; 
}  else  {
    middle = thirdWord; 
} 

答案 2 :(得分:0)

这是另一种代码少的解决方案

public static void main(String[] args) {
    // TODO code application logic here
    System.out.println("Enter three words separated by spaces: ");
    //Scanner wordsInput = new Scanner(System.in);
    Console console = System.console();

    //List<String> words = new ArrayList<>();
    List<String> words = Arrays.asList(console.readLine().split("\\s+"));
    Collections.sort(words);
    for (String word : words) {
         System.out.println(String.format("- %s",word));
    }
}