我有一个数组字符串的长度为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;
}
我有一个数组字符串的长度为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;
}
我会建议你两个值进行比较铸造的价值观为整数。
您需要跟踪最大值以及索引。此解决方案假定所有值都是非负值(因为我将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;
}
}
在这一点上,你有数组中最高值的索引。如果有多个最大值,则可以存储一系列索引。
严格说来,这不就是一个'转换“而不是”转换“? – sharakan 2013-02-21 02:25:16
“铸造”在这里似乎是对术语的滥用;强制转换是指在字节码级别上改变一个值的类型(例如,一个转换为int的double将在后面用4个字节表示),而这里所做的就是所谓的“解析”,即语义转换表示为一系列字符的信息。 – 2013-02-21 02:36:39
这是我的建议。如果我错了,请纠正我。
int max 0
for(i=0; i<X; i++){
if(array[i]).isLessThan(array[i+1]))
max = i+1;
else
max = i
}
一种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;
}
}
您正在多次解析相同的字符串。 – whiskeysierra 2017-10-17 11:58:34
@whiskeysierra gr8 – user1428716 2017-10-18 05:02:40
@whiskeysierra此解决方案与使用比较器有关,它应该是执行此类排序的标准方法,而不是具有自定义逻辑。从算法上讲,parseInt的额外计算会影响运行时间,但所涉及的步骤数量是相同的 - 所以这是一个更好的解决方案,而不是通过自定义逻辑来查找最大数量 – user1428716 2017-10-18 05:13:50
将其转换为使用'Integer.parse(String s)将整数' – Shivam 2013-02-21 02:00:11