Java-从文件中读取一对大数并用链表表示,得到每一对的和与乘积
Java-Read pairs of large numbers from file and represent them with linked list, get the sum and product of each pair
数据文件如下所示
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.BigDecimaljavautil.LinkedList等任何实用程序库
- 我不知道如何在一行中显示每个数字
我的结果是
12
234
123
但我需要将其显示在一行中,如
12234123
- space的问题,每对数字之间有一个空行
我只能得到第一对数字,因为我的 while 语句仅在行不为空时才有效。
如下所示:
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 here。
1) I don't know how to display each number on one row.
while ((line = file.readLine()) != null)
由于您是逐行输入的,因此您已经读完了整个数字。 String.replace(",", "")
方法将处理您的逗号。至于您的总和和乘积,请像 adder 一样思考,使用 String
表示以与您手动操作相同的方式进行加法和乘法。
2) There is a empty line between each pair of numbers. I only can get the first pair of numbers since my while statement works only when line is not null.
null
检查是针对 EOF
或文件结尾。根据 BufferedReader 的 Javadocs,您的空白行实际上等同于 "" + "\n"
,因此您实际上会读取一个空白行。所以只要检查 line.equals("")
什么都不做。
编辑:地址已更新Post
- 您需要避免资源泄漏并创建一个 File 以传递给
文件阅读器。再看看适当的构造函数。
- 我已经重构来处理你基本上有多个测试用例的事实
- 你不应该 split 在逗号分隔符上,因为你想要单行输出,对吗?
- 最后,为了您的逻辑,研究一下 bignums,BigInteger 是如何实现的,并尝试创建您自己的简单实现。
这是针对您的 I/O 实施的所有修复。您应该阅读更多有关该主题的内容,但这将使您能够专注于 bignum 算法,我怀疑这就是本练习的重点。
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("%s\n", num1);
System.out.printf("%s\n", num2);
System.out.printf("sum: %s\n", add(num1, num2));
System.out.printf("product: %s\n", multiply(num1, num2));
reader.readLine(); // consume blank line
}
} catch (IOException e) {
System.err.println(e.getMessage()); // error output
}
数据文件如下所示
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.BigDecimaljavautil.LinkedList等任何实用程序库
- 我不知道如何在一行中显示每个数字
我的结果是
12
234
123
但我需要将其显示在一行中,如
12234123
- space的问题,每对数字之间有一个空行 我只能得到第一对数字,因为我的 while 语句仅在行不为空时才有效。
如下所示:
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 here。
1) I don't know how to display each number on one row.
while ((line = file.readLine()) != null)
由于您是逐行输入的,因此您已经读完了整个数字。 String.replace(",", "")
方法将处理您的逗号。至于您的总和和乘积,请像 adder 一样思考,使用 String
表示以与您手动操作相同的方式进行加法和乘法。
2) There is a empty line between each pair of numbers. I only can get the first pair of numbers since my while statement works only when line is not null.
null
检查是针对 EOF
或文件结尾。根据 BufferedReader 的 Javadocs,您的空白行实际上等同于 "" + "\n"
,因此您实际上会读取一个空白行。所以只要检查 line.equals("")
什么都不做。
编辑:地址已更新Post
- 您需要避免资源泄漏并创建一个 File 以传递给 文件阅读器。再看看适当的构造函数。
- 我已经重构来处理你基本上有多个测试用例的事实
- 你不应该 split 在逗号分隔符上,因为你想要单行输出,对吗?
- 最后,为了您的逻辑,研究一下 bignums,BigInteger 是如何实现的,并尝试创建您自己的简单实现。
这是针对您的 I/O 实施的所有修复。您应该阅读更多有关该主题的内容,但这将使您能够专注于 bignum 算法,我怀疑这就是本练习的重点。
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("%s\n", num1);
System.out.printf("%s\n", num2);
System.out.printf("sum: %s\n", add(num1, num2));
System.out.printf("product: %s\n", multiply(num1, num2));
reader.readLine(); // consume blank line
}
} catch (IOException e) {
System.err.println(e.getMessage()); // error output
}