2013-02-21 80 views
0

我有一個數組字符串的長度爲X的數組(「32」,「49」,「2」,...),我需要找到該數組中最大的數字並返回位置(數組[3]是最大數字)如何比較數字字符串?

是否有像數組[0] .isLessThan(數組[3])的庫?或類似的東西?

方案至今:

int max 0 

for(i=1; i<X; i++){ 

if(array(max).isLessThan(array[i])) 
    max = i; 
} 
+3

將其轉換爲使用'Integer.parse(String s)將整數' – Shivam 2013-02-21 02:00:11

回答

2

我會建議你兩個值進行比較鑄造的價值觀爲整數。

您需要跟蹤最大值以及索引。此解決方案假定所有值都是非負值(因爲我將max設置爲-1),但是您可以輕鬆將max更改爲int min或類似的值。

int max = -1; 
int index = -1; 

for (int i = 0; i < array.Length; i++) 
{ 
    int value = Integer.parse(array[i]); 
    if (value > max) 
    { 
     max = value; 
     index = i; 
    } 
} 

在這一點上,你有數組中最高值的索引。如果有多個最大值,則可以存儲一系列索引。

+1

嚴格說來,這不就是一個'轉換「而不是」轉換「? – sharakan 2013-02-21 02:25:16

+3

「鑄造」在這裏似乎是對術語的濫用;強制轉換是指在字節碼級別上改變一個值的類型(例如,一個轉換爲int的double將在後面用4個字節表示),而這裏所做的就是所謂的「解析」,即語義轉換表示爲一系列字符的信息。 – 2013-02-21 02:36:39

0

這是我的建議。如果我錯了,請糾正我。

int max 0 

for(i=0; i<X; i++){ 

    if(array[i]).isLessThan(array[i+1])) 
     max = i+1; 
    else 
     max = i 
} 
-1

一種Acamedic利益着想:)更復雜的解決方案:

public static void main(String[] args) { 

    String[] anArrayOfStrings={"199999","32", "33", 
"10000","45","99999","72987","0","92"}; 
    Test test=new Test(); 
    Test.CX cx=test.new CX(); 
    java.util.Arrays.sort(anArrayOfStrings,cx) ; 
    System.out.println("Item="+anArrayOfStrings[(anArrayOfStrings.length-1)]); 
} 

class CX<String> implements Comparator{ 

    @Override 
    public int compare(Object arg0, Object arg1) { 



     if(Integer.parseInt((java.lang.String) arg0) > 
    Integer.parseInt((java.lang.String) arg1)){ 

      return 1; 

     }else if(Integer.parseInt((java.lang.String) arg0) < 
    Integer.parseInt((java.lang.String) arg1)){ 
      return -1; 
     } 

     return 0; 
    } 


} 
+1

您正在多次解析相同的字符串。 – whiskeysierra 2017-10-17 11:58:34

+0

@whiskeysierra gr8 – user1428716 2017-10-18 05:02:40

+0

@whiskeysierra此解決方案與使用比較器有關,它應該是執行此類排序的標準方法,而不是具有自定義邏輯。從算法上講,parseInt的額外計算會影響運行時間,但所涉及的步驟數量是相同的 - 所以這是一個更好的解決方案,而不是通過自定義邏輯來查找最大數量 – user1428716 2017-10-18 05:13:50