2012-07-25 42 views
-3

我已經創建了一個2d數組,我需要在該數組中搜索狀態縮寫,如果找到,那麼我需要打印它發現的行。我確實爲此創建了一個單獨的方法。我正在傳遞一個兩字母狀態縮寫,我在我的主要要求。我已經搜索了其他論壇,但是我看到的所有問題都與這類問題有關。我發現的很多東西都是爲了找到重複的東西,或者如果發現打印索引,而不是行。感謝任何幫助。搜索一個元素的二維數組(Java)

private static void ticketpayout(String state) { 
    // search array for state 

    //2d array with all state info 
    String[][] tax = { 
     {"AZ", "5%", "Annually", "$2,823,333", "After 30 Years", "$84,699,990", "Cash", "$57,050,000"}, 
     {"AR", "7%", "Annually", "$2,742,667", "After 30 Years", "$82,280,010", "Cash", "$55,420,000"}, 
     {"CO", "4%", "Annually", "$2,863,667", "After 30 Years", "$85,910,010", "Cash", "$57,865,000"}, 
     {"CT", "6.7%", "Annually", "$2,754,767", "After 30 Years", "$82,643,010", "Cash", "$55,664,500"}, 
     {"DE", "0%", "Annually", "$3,025,000", "After 30 Years", "$90,750,000", "Cash", "$61,125,000"}, 
     {"FL", "0%", "Annually", "$3,025,000", "After 30 Years", "$90,750,000", "Cash", "$61,125,000"}, 
     {"GA", "6%", "Annually", "$2,783,000", "After 30 Years", "$83,490,000", "Cash", "$56,235,000"}, 
     {"ID", "7.8% ", "Annually", "$2,710,400", "After 30 Years", "$81,312,000", "Cash", "$54,768,000"}, 
     {"IL", "5%", "Annually", "$2,823,333", "After 30 Years", "$84,699,990", "Cash", "$57,050,000"}, 
    }; 

} 
+0

你試過了什麼循環? – Randy 2012-07-25 13:42:25

+0

您作爲方法的參數傳遞的狀態僅由兩個或更多字母定義? – 2012-07-25 13:43:55

+0

歡迎來到Stackoverflow。請編輯您的問題,以包含您迄今爲止編寫的搜索方法。 – mikej 2012-07-25 13:44:42

回答

3

您可以通過一個二維數組,這樣搜索:

for (int i = 0; i < rowLength; i++) { 
    for (int j = 0; j < colLength; j++) { 
     if (tax[i][j].equals(state)) 
      printArray(tax, i); 
    } 
} 

public static void printArray(String[][] array, int row) { 
    for(int i = 0; i < rowLength; i++) 
     System.out.print(array[row][i] + " "); 
} 

要回答@樹的問題,這是你將如何檢查,如果兩行相等:

public static boolean rowEquals(String[] one, String[] two) { 
    for(int i = 0; i < one.length; i++) 
     if(!one[i].equals(two[i])) 
      return false; 
    return true; 
} 
+0

這看起來更像我在找的東西,唯一的問題是我想打印出整行中的信息,而不是行索引。 – Tree 2012-07-25 13:59:22

+0

我認爲應該這樣做。 – jrad 2012-07-25 14:01:32

+0

好吧,我已經玩了一個多小時的下半部,我用它自己的方法嘗試了它,並且它什麼都沒做,我在我的支付方法中嘗試了它,但它什麼都沒做。這是我做的編輯: for(int i = 0; i <8; i ++) System.out.print(array [row] [i] +「」); } – Tree 2012-07-25 15:34:37

0

直接回答你的問題,你可以通過tax陣列遍歷,檢查每一個元素,如下:

private static String[][] tax = ...; 

private static String[] ticketpayout(String state) { 
    for (String[] taxRow : tax) { 
     if (taxRow[0].equals(state)) { 
      return taxRow; 
     } 
    } 

    return null; 
} 

不過,我不認爲這是最好的類設計的問題,看來你是試圖解決。這將是更好地使對象在這裏的數據,並將它們添加到基於狀態的縮寫一個地圖,具體如下:

public class TaxInfo { 
    String state; 
    double taxRate; 
    Period period; 
    etc... 

    enum Period { 
     ANNUALLY, 
     MONTHLY, 
     etc... 
    } 
} 

private static Map<String, TaxInfo> tax = new HashMap<String, TaxInfo>(); 

private static void populateTaxInfo() { 
    tax.put("AZ", new TaxInfo("AZ", 5, TaxInfo.Period.ANNUALLY, ...)); 
    tax.put("AR", new TaxInfo("AR", 7, TaxInfo.Period.ANNUALLY, ...)); 
    tax.put("CO", new TaxInfo("CO", 4, TaxInfo.Period.ANNUALLY, ...)); 
    ... 
} 

然後檢索記錄,只是做例如tax.get("AZ");

+0

謝謝你的回答。然而,然後我們在課堂上學到的東西更多地涉及到了。所以我的代碼丟失了一點。 – Tree 2012-07-25 14:00:43

+0

然後第一部分(水平線突破之前)應該足以解決您的問題。似乎有其他答案幫助,所以這已經夠好了! – 2012-07-25 14:04:00

0

您需要搜索[0] [1] [0] [2] ..等等,通過兩個維度,直到你找到你要找的東西...

你可以做嵌套for循環。也搜索這個網站,我確定有搜索的例子。

你也應該張貼你試過的東西,這樣我們可以幫你。

search a 2 dimensional array in java