我首先要说我的排序必须是硬编码的。我可能不会使用以前存在的排序函数。所以我写了这个:
for(int g = 0; g < priceArray.size(); g++)
{
for(int h = 1; h < priceArray.size() - 1; h++)
{
int found = priceArray.get(h).indexOf('$', 8);
if(Double.parseDouble(priceArray.get(h).substring(found+1)) > Double.parseDouble(priceArray.get(h+1).substring(found+1)))
{
String a = priceArray.get(h);
String b = priceArray.get(h+1);
priceArray.set(h,b);
priceArray.set(h+1, a);
}
}
}
在代码的早期,此代码将输入放入ArrayList:
double oneD = daIS.readDouble();
int twoD = (int)daIS.readDouble();
double threeD = oneD * twoD;
String oneT = (String.format("$%.2f", oneD));
String twoT = (String.format("%s", twoD));
String threeT = (String.format("$%.2f", threeD));
priceArray.add(oneT + " x " + twoT + " = " + threeT);
基本上,这段代码获取输入,将其放入arraylist,然后sort方法在数组索引中搜索第二个$ money符号,并获取子字符串,以便在$符号后复制金额。解析它加倍并将其与下一个索引(h + 1)进行比较。
如果索引h大于索引h + 1,我们切换两个。循环继续前进。最后,在我没有发布的代码中,代码以排序的顺序显示在新窗口中。
示例:我在微调器中打开程序,输入5和输入3。如果我按保存,这些将保存在我的二进制文件中,然后转换回arraylist。我按了检索,我的输出是
$5.00 x 3 = $15.00
如果输入
,这完全正常10 and 5(spinner)
20 and 2
50 and 1
30 and 4
作为输出
$20.00 x 2 = $40.00
$10.00 x 5 = $50.00
$50.00 x 1 = $50.00
$30.00 x 4 = $120.00
但如果我的输入是
10 x 1(spinner)
100 x 1
10 x 1
程序中断并返回
Exception in thread "JavaFX Application Thread"
java.lang.NumberFormatException: For input string: "$100.00"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
我知道这很令人困惑,也许你质疑我的硬编码字符串排序的必要性,但遗憾的是这是一个要求。并且工作到一定程度,所以我相信它应该是可以修复的。谢谢你的阅读。
编辑:在@Nabin Bhandari的帮助下解决方案
int found1 = priceArray.get(h).lastIndexOf('$');
int found2 = priceArray.get(h+1).lastIndexOf('$');
if(Double.parseDouble(priceArray.get(h).substring(found1+1)) > Double.parseDouble(priceArray.get(h+1).substring(found2+1)))
答案 0 :(得分:1)
在您的代码中:
int found = priceArray.get(h).indexOf('$', 8);
您对priceArray.get(h)
和priceArray.get(h+1)
使用此值。
而不是你应该为两种不同的价格获得两个不同的指数。
for(int g = 0; g < priceArray.size(); g++)
{
for(int h = 1; h < priceArray.size() - 1; h++)
{
int found1 = priceArray.get(h).lastIndexOf('$');
int found2 = priceArray.get(h+1).lastIndexOf('$');
String firstPrice = priceArray.get(h);
String secondPrice = priceArray.get(h+1);
String first = firstPrice.substring(found1+1);
String second = secondPrice.substring(found2+1);
if(Double.parseDouble(first) > Double.parseDouble(second))
{
String a = priceArray.get(h);
String b = priceArray.get(h+1);
priceArray.set(h,b);
priceArray.set(h+1, a);
}
}
}
但上述代码似乎没有对价格进行排序。
所以,这是一种替代方式来对列表进行排序:
Collections.sort(priceArray, new Comparator<String>() {
@Override
public int compare(String p1, String p2) {
String first = p1.substring(p1.lastIndexOf('$')+1);
String second = p2.substring(p2.lastIndexOf('$')+1);
System.out.println(first);
System.out.println(second);
return (int) (Double.parseDouble(first)-Double.parseDouble(second));
}
});