2014-04-03 95 views
-1

這裏是我的要求:國家和首都2D陣列,JAVA

創建(硬編碼)的50個州和他們的首都城市,使用2 維數組。

在對話框中:要求用戶輸入州或城市。

如果進入州,找到它的首府城市。如果輸入了一個城市, 找到它的狀態。

如果未找到,則發出錯誤消息。

這應該是一個循環,直到用戶不想再玩 。

我真的不知道從哪裏開始,到目前爲止我所做的所有工作都是創建數組,我真的不知道如何搜索數組,並且吐出相應的狀態/資本。

任何幫助將不勝感激。

這是我寫到目前爲止的代碼。

import java.util.Scanner; 

public class GuessStates { 
    public static void main(String[] args){ 

      java.util.Scanner input = new java.util.Scanner(System.in); 

    String[][] statesAndCapitols = { 
     {"Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"}, 
     {"Montgomery","Juneau","Phoenix","Little Rock","Sacramento","Denver","Hartford","Dover","Tallahassee","Atlanta","Honolulu","Boise","Springfield","Indianapolis","Des Moines","Topeka","Frankfort","Baton Rouge","Augusta","Annapolis","Boston","Lansing","St. Paul","Jackson","Jefferson City","Helena","Lincoln","Carson City","Concord","Trenton","Santa Fe","Albany","Raleigh","Bismarck","Columbus","Oklahoma City","Salem","Harrisburg","Providence","Columbia","Pierre","Nashville","Austin","Salt Lake City","Montpelier","Richmond","Olympia","Charleston","Madison","Cheyenne"}}; 

      System.out.println("Please enter a State or a capitol city."); 
       String userInput = input.nextLine(); 



     } 
    } 

再次感謝!

+1

我真的開始閱讀一些關於循環機制的基本java教程,作爲提示do ... while循環可能是最簡單的輸入選項。 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html以及搜索算法的for循環http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html – PaulHickman

+0

我瞭解這些頁面上的所有內容,瞭解如何搜索數值數組,但我不知道從哪裏開始使用字符串。 – ryan5892

+0

哦,好吧,你最好的選擇是循環整個數組,並且每次通過使用String.equals函數檢查州和國會大廈。請記住,由於字符串是複雜的對象,「==」並不總是正確的,如果你發現狀態打印國會大廈,如果你發現國會大廈打印狀態,在循環內部。希望這會有所幫助,注意搜索數組是相同的,無論數組類型 – PaulHickman

回答

0

嘗試使用for循環搜索數組。

使用for循環會跟蹤並更新當前遍歷數組的位置。

一旦你通過檢查userInput.equalsIgnoreCase(statesAndCapitols [X] [Y]),然後取當前位置你在和檢索所需要的信息,找到正確的狀態或資本(

IE

for(int x = 0; x < 2; ++x) //loop through states the first time, capitols the second 
    for(int y = 0; y < 50; ++y) //always 50, unless new states get added (obviously not a problem in this example, but useful to think about in future problems - YOUR DATA WILL ALMOST ALWAYS CHANGE. 
    if(userInput.equalsIgnoreCase(statesAndCapitols[x][y]) 
     System.out.println(statesAndCapitols[x == 1 ? 0 : 1][y]); 

在陣列中,我做了X == 1?0:1,這是一個三元運算符,就是它的意思是,如果x等於1,使用值0,否則使用值1

這是解決這個問題的方法之一。

另一種方法是爲城市和州創建您自己的類/數據類型,這樣您不需要保持陣列同步,這意味着您不需要更新2個項目進行一次更改(如添加另一個城市/州組合)。

希望這會有所幫助! :)

+0

完美。我不敢相信這很簡單,我一直在想這個問題。 謝謝! – ryan5892

0
String entered_state=input.nextLine(); 
for(int i=0;i<50;i++){ 
    if(statesAndCapitols[0][i].equals(entered_state)){ 
     String searched_city=statesAndCapitols[1][i]; 
     //print the city name 
     break; 
     } 
} 
if(i==50) 
//print error 

從進入的城市搜索狀態相同的東西。

+1

原始數組初始化的方式(這與大多數人做這件事的方式不同),你得到的二維數組索引是錯誤的 - 應該是'statesAndCapitols [0] [i]'和'statesAndCapitols [1] [i]'。 – ajb

+0

所以我應該做50行和2列,而不是50列和2行?你是這個意思嗎? – ryan5892

+0

是的,這就是一般的想法。在你的代碼中,你可以製作兩組50個元素,每個都鏈接一個。另一種方式,你將製作50組一套州和城市。 – Sumedh