2

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

例子;

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

该程序运行良好(如果我尝试上面的示例),除了我将在下面展示的一种组合示例。

例子;

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

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

我相信这行代码正在影响程序,因为它说“从未使用过这个分配的值”,但我不确定如何解决它,因为我仍然是入门 Java 学习者。

  • 中间=第一个词;

由于该行未使用,这就是 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 ); 


}
}

有没有人我错过或做错了什么?:( 请感谢您的帮助!

4

3 回答 3

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--;
        }
    }
于 2013-10-20T03:03:46.583 回答
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));
    }
}
于 2013-10-20T03:50:38.897 回答
0

else在选择middle单词时缺少一个:第一个if正确分配Orange给它,但最后一个if/else重新分配Pear给它。

以下是修复代码的方法:

if( !firstWord.equals(bottom) && !firstWord.equals(top) ) {
    middle = firstWord; 
} else if( !secondWord.equals(bottom) && !secondWord.equals(top) ) {
    middle = secondWord; 
}  else  {
    middle = thirdWord; 
} 
于 2013-10-20T03:02:52.170 回答