java - 询问用户三个名字并按字母顺序打印

标签 java string-comparison

引用文中的引用:“编写一个程序,要求用户输入三个名字,然后按升序排列显示这些名字。例如,如果用户输入“Charlie”、“Leslie”和“Andy” ",程序会显示

Andy 
Charlie 
Leslie 

我的教授特别说我们不允许使用循环或数组,因为我们在类里面没有介绍过。我一直在尝试使用 compareTo 方法,但似乎无法让它与两个以上的字符串变量一起运行。

public class SortedNames {

    public static void main(String[] args) {

        //Declare Variables
        String name1;
        String name2;
        String name3;

        //Accept User Imput
        Scanner keyboard=new Scanner(System.in);
        System.out.print("Please Enter First Name ");
        name1=keyboard.nextLine();
        System.out.print("Please Enter Second Name ");
        name2=keyboard.nextLine();
        System.out.print("Please Enter Third Name ");
        name3=keyboard.nextLine();


        //Compare

        if((name2.compareToIgnoreCase(name1)<0)&&(name2.compareToIgnoreCase(name3)<0))
        {
            System.out.println(name2);
        }

        //Compare 

        if((name1.compareToIgnoreCase(name2)<0)&&(name1.compareToIgnoreCase(name3)<0))
        {
            System.out.println(name1);
        }

        //Compare

        if((name3.compareToIgnoreCase(name1)<0)&&(name3.compareToIgnoreCase(name2)<0))
        {
            System.out.println(name3);
        }
  }     

}

最佳答案

您有三个字符串,您需要比较它们并相应地对它们进行排序。让我们使用您的示例值:

String name1, name2, name3;
name1 = "Charlie";
name2 = "Leslie";
name3 = "Andy";

为了简单起见,有一条规则:您不能简单地“交换”值。您需要一个临时变量来保存要交换的值:

String temp;

现在,进行比较。我解决这个问题的方法是将第一个名字与第二个和第三个名字进行比较,并进行必要的交换:

if(name1.compareTo(name2) > 0) { // "Charlie" > "Leslie" (this won't happen)
    temp = name1;    // temp = "Charlie"
    name1 = name2;   // name1 = "Leslie"
    name2 = temp;    // name2 = "Charlie"
}
if(name1.compareTo(name3) > 0) { // "Charlie" > "Andy" (this will happen)
    temp = name1;    // temp = "Charlie"
    name1 = name3;   // name1 = "Andy"
    name3 = temp;    // name3 = "Charlie"
}
/*
 * Up to this point:
 * name1 = "Andy"; name2 = "Leslie"; name3 = "Charlie"
 */

这样,您将确保 name1 中保存三个值中的最小值。现在,比较 name2name3,并在必要时交换它们:

if(name2.compareTo(name3) > 0) { // "Leslie" > "Charlie" (this will happen)
    temp = name2;    // temp = "Leslie"
    name2 = name3;   // name2 = "Charlie"
    name3 = temp;    // name3 = "Leslie"
}
/*
 * Up to this point:
 * name1 = "Andy"; name2 = "Charlie"; name3 = "Leslie"
 */

你就完成了。

关于java - 询问用户三个名字并按字母顺序打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19190297/

相关文章:

java - Ant 无法启动,出现主类错误

java - Java 中 while 循环内的 Try-Catch

ios - 使用 nspredicate 将 for 循环中的 NSArray 与给定输入进行比较

php - Mysql查询,比较值并分配给PHP变量

c - LRS使用C程序

java - 如何分析 LAN 上运行的 Java 应用程序?

java - 如果我尝试将值放入 View 类中的 map 中,为什么会出现错误?

c# - 为什么默认的字符串比较器无法保持传递一致性?

MySQL 的 IF 语句和 TIMESTAMP 问题

java - String 类的 split 方法忽略分号分隔符