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

时间:2013-10-04 20:34:20

标签: java string-comparison

从文本引用引用:“编写一个程序,要求用户输入三个名称,然后显示按升序排序的名称。例如,如果用户输入”查理“,”莱斯利和“安迪“,程序会显示

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);
        }
  }     

}

4 个答案:

答案 0 :(得分:6)

现在您已经发布了代码,我会给您一些帮助您的建议。

首先,尝试在纸上做一些例子,并找出你想要做的事情的逻辑。努力思考计算机必须做什么。

  • 你的程序如何知道是否需要交换两个名字?
  • 你的程序将如何交换它们?

重要。 在阅读我在线下下面写的内容之前,先在纸上做例子。两三个好的和诚实的例子将帮助你理解如何完成这件事。




好的,现在你知道怎么做,至少在纸上。现在,让我们编码吧。

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

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"
 */

你已经完成了。

重要。在编写此代码之前。 明白。引自this ten commandments

  

你不得复制并粘贴其他人的代码,至少不要试图理解它的作用。


一些个人提示:

如果你想问一个问题,一定要诚实。你需要付出一些努力,并表现出努力。引自http://whathaveyoutried.com

  

这是关键的实现。当你被问到“你有什么尝试?”时,这并不意味着“告诉我你写的代码,或者小便”。你要做的就是至少试着帮助自己 - 尝试是重要的事情。

     

因此,下次你在考虑提问时,当你被问到“你有什么尝试?”时,你最好准备好一个令人信服的答案。

     

如果你的答案相当于“不是很多”,请接受我的说法:你要回答的下一个问题是“那我为什么要帮助你?”

答案 1 :(得分:3)

伪代码

if s1 > s2 swap them
if s2 > s3 swap them
if s1 > s2 swap them
print s1, s2, s3

答案 2 :(得分:2)

这是一个解决方案:

import java.io.Console;

public final class SortNames
{
    private static final String PROMPT_FMT = "Enter %s name: ";
    private static final String NAME_FMT = "%s\n";

    private static final String FIRST = "1st";
    private static final String SECONDS = "2nd";
    private static final String THIRD = "3rd";

    public static void main(final String[] args)
    {
        final Console console = System.console();
        if (console != null)
        {
            final SortNames sortNames = new SortNames(console);
            sortNames.run();
        } // if
        else
        {
            System.err.println("Sorry, no console.");
            System.exit(1);
        } // else
    } // main(String[])

    private final Console mConsole;

    private String mName1 = null;
    private String mName2 = null;
    private String mName3 = null;

    public SortNames(final Console console)
    {
        super();
        mConsole = console;
    } // constructor()

    private void run()
    {
        requestNames();
        sortNames();
        printNames();
    } // run()

    private void requestNames()
    {
        mName1 = requestName(FIRST);
        mName2 = requestName(SECONDS);
        mName3 = requestName(THIRD);
    } // requestNames()

    private String requestName(final String ordinal)
    {
        return mConsole.readLine(PROMPT_FMT, ordinal);
    } // requestName(String)

    private void sortNames()
    {
        sortNames1and2();
        if (sortNames2and3())
        {
            sortNames1and2();
        } // if
    } // sortNames()

    private void sortNames1and2()
    {
        if (greaterThan(mName1, mName2))
        {
            final String greater = mName1;
            mName1 = mName2;
            mName2 = greater;
        } // if
    } // sortNames1and2()

    private boolean sortNames2and3()
    {
        if (greaterThan(mName2, mName3))
        {
            final String greater = mName2;
            mName2 = mName3;
            mName3 = greater;
            return true;
        } // if
        return false;
    } // sortNames2and3()

    private void printNames()
    {
        printName(mName1);
        printName(mName2);
        printName(mName3);
    } // printNames()

    private void printName(final String name)
    {
        mConsole.format(NAME_FMT, name);
    } // printName(String)

    private static boolean greaterThan(final String s1, final String s2)
    {
        return s1.compareTo(s2) > 0;
    } // greaterThan(String, String)


} // class SortNames

答案 3 :(得分:1)

import java.util.Scanner; //需要用户输入

public static void main(String[] args) 
{

    String name1;
    String name2;
    String name3;

    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();

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

}

}