2013-10-04 24 views
0

引用來自文本的引用:「編寫一個程序,要求用戶輸入三個名稱,然後按升序排列名稱,例如,如果用戶輸入「查理」,「張國榮和‘安迪’,該計劃將顯示請求用戶輸入三個名字並按字母順序排列

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

} 
+2

你不應該試圖讓'超過2串compareTo'工作。 –

+0

你會如何比較三個數字? – iamnotmaynard

+2

你試過了什麼?我們不只是爲你編寫代碼。發佈您迄今爲止的內容。 –

回答

3

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

我寫的東西似乎只是不打印出所有的三個名字 – Harvey

+0

@Harvey忘記打印直到完成排序。集中獲取name1,name2和name3以按升序包含名稱。 – Tarik

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報價:

這是關鍵的實現。當你被問到「你試過什麼?」時,它並不意味着「向我展示你寫的代碼或者搞砸了」。你所要做的至少是試着去幫助自己 - 而嘗試是最重要的。

你考慮問一個問題,你最好準備好,當你問一個令人信服的答案「你嘗試過什麼?」

因此,下一次如果你的答案達「不是很多」把我的話:你回來將是下一個問題:‘那麼我爲什麼要幫你’

+0

很好的解釋+1 – Tarik

+0

據我所知,這是一個「冒泡排序」...相當不方便,但對於這個 – Barranka

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

足夠了哇!很多樣板代碼是什麼?你正在處理一個已經完全困惑的新手。希望你的複雜答案不會讓他完全脫離編程! – Tarik

1

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

} 

}

+0

這工作很好! – user5304649