我一直在努力解决问题:
"设计一个程序,询问用户一系列名称(无特定顺序)。输入最终人名后,程序应按字母顺序显示名称,并按字母顺序显示姓名。
例如,如果用户输入名字Kristin,Joel,Adam,Beth,Zeb和Chris,该程序将显示Adam和Zeb。"
我有一个名为getString的函数,它返回一个有效的字符串输入;以及一个名为displayResults的模块,它按字母顺序显示名字,并按字母顺序显示姓氏。我也使用" q"作为退出while循环的标记值。
然而,我遇到了一个问题,如果我输入的名称如下:" bob"," david"," alex"和&# 34;查理",它会正确显示名字" alex",但会错误地显示姓氏"查理"而不是"大卫"。我已经尝试查看我的代码中的错误,但无法找到它弄乱的地方。任何帮助表示赞赏。
name = getString("Please enter a name, or input q to exit.");
if(!name.equals("q")) {
low = name;
high = name;
}
while(!name.equals("q")) {
int x;
x = name.compareToIgnoreCase(low);
if(x == -1){
low = name;
}
x = name.compareToIgnoreCase(high);
if(x == 1) {
high = name;
}
name = getString("Please enter another name, or input q to exit.");
}
displayResults(low, high);
答案 0 :(得分:4)
Java API documentation仅表示compareToIgnoreCase()"返回: 负整数,零或正整数"。由于您分别将x与1和-1进行比较,因此您可能实际上正在接收另一个值,因此真正的"高"没有被发现。
另一种可能性是输入中可能存在不可见的字符(如空格或返回)。我跑的时候#34;大卫" .compareToIgnoreCase("查理")在我的机器上,它返回-67。
答案 1 :(得分:0)
您可以使用您排序的列表。
import java.util.List;
import java.util.Collections;
public class Main {
public static void main (String[] args) {
boolean run = true;
List<String> names = new List<String>();
while (run) {
String name = getString ();
if (name == "q") run = false;
else
names.add (name);
}
Collections.sort (names);
// Results:
System.out.println (names.get (0)); // Print out first entry
System.out.println (names.get (names.size() - 1)); // ... and last one
}
public static String getString () {
// Your method
}
}
答案 2 :(得分:0)
为了对名称进行排序,您应该使用collection对元素进行排序 对于这个porpose,您可以使用TreeSet实现,它是一个有序集。 Set还确保不存储重复元素(为此它使用元素的compareTo方法)。
您还可以创建一个Collator对象(实现比较器接口),该对象可以使用区域设置对象对元素进行排序。使用这种方法很容易进行基于本地化的排序。
请参阅以下示例:
public static void main(String[] args) {
// Create the locale object
// This will be used when sorting the elements
Locale myLocale = Locale.ENGLISH;
// Locale myLocale = new Locale("HU", "hu");
// Locale myLocale = Locale.getDefault();
// Create the collator which will be responsible for using the locale object in order to compare the elements in the TreeSet
Collator coll = Collator.getInstance(myLocale);
coll.setStrength(Collator.PRIMARY);
// TreeSet for storing the elements
// Note that the TreeSet is instantiated with the collator object
TreeSet<String> names = new TreeSet<>(coll);
names.add("bob");
names.add("david");
names.add("alex");
names.add("charlie");
// You can call first and last method to get the first and last element sorted
System.out.println(names.first());
System.out.println(names.last());
}
我认为这是最简单,最快速,最专业的方法,因为在这种情况下你让java为你做排序,你只需要配置应该这样做的方式。
我希望这会有用。