2013-02-21 96 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