【发布时间】:2014-11-04 05:10:19
【问题描述】:
我有一个将字符串转换为 MeterNumber 的方法。代码如下。
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;
}
}
这是从我的 main 方法调用的代码:
Scanner sc2 = new Scanner(new java.io.File("Readings.txt"));
Meter meter = Meter.load(sc2);
System.out.println(meter.getMeterNumber());
提前致谢。
【问题讨论】:
-
什么是
MeterNumber? -
这是一个九位数字
-
您需要提供可运行代码。所以你需要向我们展示
MeterNumber的代码 -
请原谅我的无知,但是否有一些要求阻止您使用 Double.parseDouble() 和 Integer.parseInt()?
-
@RuchiraGayanRanaweera 我编辑了我的问题以包含所涉及的代码