数据文件如下图
12,234,123
123,452,622
(here is a empty line)
1,000,010
20,000
结果假定如下
所示12234123
123452622
sum: 125686745
product:1510334562...
1000010
20000
sum: 1020010
product: 20000200000
不能使用任何工具库,如java.math.BigDecimal javautil。LinkedList等。
- 我不知道如何在一行上显示每个数字
我的结果是
12
234
123
但是我需要在一行中显示为
12234123
- 的空格问题,每对数字之间有一条空行我只能得到第一对数字,因为我的while语句只在line不为空时工作。
如下所示:
while((Line = File.readLine())!= null)
我不知道如何修改它。
表示求和法和乘积法。希望有人能给我一些提示。
是代码。(空行问题解决)
public static void main (String[] args){
if (args.length == 0)
System.out.println("No file specified.");
else{
FileReader theFile;
BufferedReader inFile;
String num1,num2;
try{
theFile = new FileReader(args[0]);
inFile = new BufferedReader(theFile);
while((num1 = inFile.readLine())!= null){
if(num1.length()==0){
}
else{
num2 = inFile.readLine();
num1.replace(",", "");
num2.replace(",", "");
System.out.println(num1);
System.out.println(num2);
}
}
}
catch (Exception e) {
System.out.println(e);
}
}
}
好吧,我会解决你的两点,但你应该在这里阅读I/O。
1)我不知道如何在一行中显示每个数字
while ((line = file.readLine()) != null)
由于您是逐行使用输入,因此您已经将整个数字读入。String.replace(",", "")
方法将处理您的逗号。至于求和和乘积,就像一个加法器,用String
表示来做加法和乘法,就像你用手做一样。
2)每对数字之间有一个空行。我只能得到第一对数字,因为我的while语句只在line不为空时起作用。
null
检查是针对EOF
,或文件结束。根据BufferedReader的Javadocs,空行实际上相当于"" + "n"
,因此您实际上将读取空行。所以只要检查line.equals("")
,什么都不做。
EDIT: Addressing Updated Post
- 您需要避免资源泄漏,并创建一个文件传递给FileReader。再看一下适当的构造函数。
- 我已经重构来处理你基本上有多个测试用例的事实
- 你不应该在逗号分隔符上分割,因为你想要单行输出,对吗?
- 最后,对于你的逻辑,做一些研究,BigInteger是如何实现的,并尝试创建自己的简单实现。
这里是所有修复您的I/O实现。您应该阅读更多有关该主题的内容,但这将使您能够专注于bigum算法,我认为这是本练习的重点。
private static String add(String num1, String num2) {
// implement
}
private static String multiply(String num1, String num2) {
// implement
}
try (
BufferedReader reader = new BufferedReader(new FileReader(new File(args[0])));
) {
String num1, num2;
while ((num1 = reader.readLine()) != null) {
num2 = reader.readLine(); // assumes your input is formatted correctly
num1.replaceAll(",", ""); // "delete" commas
num2.replaceAll(",", "");
System.out.printf("%sn", num1);
System.out.printf("%sn", num2);
System.out.printf("sum: %sn", add(num1, num2));
System.out.printf("product: %sn", multiply(num1, num2));
reader.readLine(); // consume blank line
}
} catch (IOException e) {
System.err.println(e.getMessage()); // error output
}