最近做hdoj,有一题1009题怎么都不能过,总是WA(wrong answer)。于是我反复改,参考别人代码,最后改了一处自认为无关紧要的代码,没想到竟然过了。我所作的更改是把这段代码 DecimalFormat formator = new DecimalFormat("0.000");
System.out.println(formator.format(totalJavaBeans));//不能通过改为了这样 System.out.println(String.format("%.3f", totalJavaBeans));//可以通过我就很奇怪这两段代码输出有什么区别,于是用如下代码做了测试(测试这两种浮点输出有没有区别)import java.text.DecimalFormat;
import java.util.Random;public class test {
static Random random = new Random();
static DecimalFormat format = new DecimalFormat("0.000"); public static void main(String[] args) {
for (int i = -100; i < 100; i++) {
test(i);
}
for (int i = 0; i < 100; i++) {
test(random.nextDouble()/10);
}
for (int i = 0; i < 100; i++) {
test(random.nextDouble());
}
for (int i = 0; i < 100; i++) {
test(random.nextDouble() * 10);
}
for (int i = 0; i < 100; i++) {
test(random.nextDouble() * 100);
}
}
static void test(double number) {
String str1 = format.format(number);
String str2 = String.format("%.3f", number);
if (!str1.equals(str2)) {
System.out.println(str1 + " " + str2+" "+number);
}
}
}结果得出没有任何区别,请问有人知道为什么吗?我的电脑:win7+jdk1.8 64位
以下附上1009题的代码,其中40和41行代码分别为能通过的代码和不能通过的代码
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;public class Main {
static Scanner scanner = new Scanner(System.in); public static void main(String[] args) {
int M = scanner.nextInt();
int N = scanner.nextInt(); while (!(M == -1 && N == -1)) {
ArrayList<House> houses = new ArrayList<Main.House>();
for (int i = 0; i < N; i++) {
int J = scanner.nextInt();
int F = scanner.nextInt();
if (J > 0)
houses.add(new House(J, F));
} Collections.sort(houses);
// System.out.println(houses); double totalJavaBeans = 0.0;
for (int i = 0; i < houses.size(); i++) {
if (M >= houses.get(i).getF()) {
totalJavaBeans = totalJavaBeans + houses.get(i).getJ();
M = M - houses.get(i).getF();
} else { totalJavaBeans = totalJavaBeans + (double) M
/ (double) houses.get(i).getF()
* (double) houses.get(i).getJ();
M = 0;
break;
}
}
DecimalFormat formator = new DecimalFormat("0.000");
System.out.println(String.format("%.3f", totalJavaBeans));//可以通过
// System.out.println(formator.format(totalJavaBeans));//不能通过 M = scanner.nextInt();
N = scanner.nextInt();
}
} static class House implements Comparable<House> {
private int J = 0;
private int F = 0; public House(int J, int F) {
// TODO Auto-generated constructor stub
this.J = J;
this.F = F;
} /**
 * @return the j
 */
public int getJ() {
return J;
} /**
 * @return the f
 */
public int getF() {
return F;
} @Override
public String toString() {
// TODO Auto-generated method stub
return "J:" + J + " F:" + F;
} @Override
public int compareTo(House o2) {
if (this.getJ() == 0)
return 1;
if (o2.getJ() == 0)
return -1;
return ((double) this.getF() / (double) this.getJ() - (double) o2
.getF() / (double) o2.getJ()) < 0 ? -1 : 1;
}
}
}