我正在尝试创建一个程序,要求用户键入三个单词并按字典顺序对它们进行排序。
实施例
- 输入三个以空格分隔的单词:
- 梨橙苹果
- 苹果
- 橙色
- 梨
程序工作正常(如果我尝试上面的例子),除了我将在下面显示的一种组合示例。
实施例
- 输入三个以空格分隔的单词:
- 橙苹果梨
- 苹果
- 梨
- 梨
程序正在跳过第一个单词(橙色),如果它应该出现在三个单词的中间。
我认为这行代码正在影响该程序,因为它表示"这个赋值永远不会被使用"但我还不确定如何修复它,因为我还是一名入门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 );
}
}
有没有人我错过了什么或做错了什么? :( 拜托,谢谢你的帮助!
答案 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));
}
}