0

テキストからの引用: 「ユーザーに 3 つの名前を入力するように要求し、名前を昇順に並べ替えて表示するプログラムを作成します。たとえば、ユーザーが「チャーリー」、「レスリー」、「アンディ」と入力した場合、プログラムが表示されます

Andy 
Charlie 
Leslie 

私の教授は、ループや配列をクラスで扱っていないため、使用することは許可されていないと具体的に言いました。メソッドを使用しようとしましたcompareToが、3 つ以上の文字列変数で実行できないようです。

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

4 に答える 4

6

3 つの文字列があり、それらを比較し、それに応じて並べ替える必要があります。あなたの例の値を使用しましょう:

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

単純にするために、1 つのルールがあります。単純に値を「交換」することはできません。交換する値を保持するには、一時変数が必要です。

String temp;

さて、比較です。私がこれに取り組む方法は、最初の名前を 2 番目と 3 番目の名前と比較し、必要な入れ替えを行うことです。

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

このようにして、3 つの値の最小値が に確実に保持され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"
 */

これで完了です。

于 2013-10-04T23:39:15.060 に答える
3

疑似コード

if s1 > s2 swap them
if s2 > s3 swap them
if s1 > s2 swap them
print s1, s2, s3
于 2013-10-04T20:47:10.143 に答える
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
于 2013-10-05T00:02:49.303 に答える
1
import java.util.Scanner;  // Needed for User Input

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);
            }
        }
    
}
于 2015-09-05T21:21:11.993 に答える