Java(初学者):在给出用户的名称列表后,按字母顺序显示名字和姓氏

时间:2016-10-21 03:26:43

标签: java

我一直在努力解决问题:

  

"设计一个程序,询问用户一系列名称(无特定顺序)。输入最终人名后,程序应按字母顺序显示名称,并按字母顺序显示姓名。

     

例如,如果用户输入名字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);

3 个答案:

答案 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为你做排序,你只需要配置应该这样做的方式。

我希望这会有用。