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等任何实用程序库

  1. 我不知道如何在一行中显示每个数字

我的结果是

12

234

123

但我需要将其显示在一行中,如

12234123
  1. 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

  1. 您需要避免资源泄漏并创建一个 File 以传递给 文件阅读器。再看看适当的构造函数。
  2. 我已经重构来处理你基本上有多个测试用例的事实
  3. 你不应该 split 在逗号分隔符上,因为你想要单行输出,对吗?
  4. 最后,为了您的逻辑,研究一下 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
}