有人可以帮我修复这个toString方法请
问题描述:
我有一个方法将字符串转换为MeterNumber。代码如下。有人可以帮我修复这个toString方法请
public static MeterNumber fromString(String number) {
MeterNumber mn = new MeterNumber(false);
int i = 0, // position in number
n = 0, // number of digits
len = number.length();
boolean valid = true;
while (valid && i < len) {
char c = number.charAt(i);
i = i + 1;
if (n < 9 && Character.isDigit(c)) {
mn.digits[n] = c - '0';
n = n + 1;
} else if (Character.isWhitespace(c)) {
// skip spaces
} else {
valid = false;
}
}
int cs = mn.checksum();
if (valid && i == len && n == 9 &&
cs/10 == mn.digits[7] && cs % 10 == mn.digits[8]) {
return mn;
} else {
return null;
}
}
它想读这样的输入:
531 481 889 O 788.5
652 364 795 P 2442.7
它会正常工作,如果我只是提供:
531 481 889
652 364 795
但是它返回null如果我输入的是这种格式:
531 481 889 O 788.5
652 364 795 P 2442.7
你可以请他我看到了这个问题。为什么Char和Double在行结尾干扰?
这是调用该方法的代码。
private MeterNumber meterNumber;
public static Meter load(Scanner sc) {
MeterNumber meterNumber = MeterNumber.fromString(sc.nextLine());
int n = 1;
sc.nextLine();
Tariff[] tariffs = new Tariff[n];
for (int i = 0; i < n; i++) {
String kind = sc.next();
sc.nextLine();
if (kind.equals("P")) {
tariffs[i] = PeakTariff.PEAK_TARIFF;
} else if (kind.equals("O")) {
tariffs[i] = OffPeakTariff.OFF_PEAK_TARIFF;
}
}
return new Meter(meterNumber, tariffs);
}
public MeterNumber getMeterNumber() {
return meterNumber;
}
}
这是代码从我的主要方法调用:
Scanner sc2 = new Scanner(new java.io.File("Readings.txt"));
Meter meter = Meter.load(sc2);
System.out.println(meter.getMeterNumber());
在此先感谢。
答
它返回null,因为你说它是无效的。
while (valid && i < len) {
char c = number.charAt(i);
i = i + 1;
if (n < 9 && Character.isDigit(c)) {
mn.digits[n] = c - '0';
n = n + 1;
} else if (Character.isWhitespace(c)) {
// skip spaces
} else { //this else is the problem
valid = false;
}
}
你告诉它设置valid
如果它既不是空格也不是数字。由于O和P不是数字或空格,它将有效设置为false。
if (valid && i == len && n == 9 &&
cs/10 == mn.digits[7] && cs % 10 == mn.digits[8]) {
return mn;
} else {
return null;
}
if语句检查的第一件事是它是否有效。由于它不是,它返回null。
什么是“MeterNumber”? – 2014-11-04 05:10:59
这是一个九位数字 – lolian 2014-11-04 05:12:05
您需要提供可运行代码。所以你需要向我们展示代码'MeterNumber' – 2014-11-04 05:12:33