Java-从文件中读取大数对并用链表表示它们,得到每对的和与积

标签 java linked-list readfile

数据文件如下所示

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 等

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

我的结果是这样的

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 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 或文件结尾。根据 Javadocs BufferedReader ,你的空行实际上相当于 ""+ "\n",所以你实际上会读到一个空行。因此,只需检查是否 line.equals("") 并且什么也不做。

    编辑:解决更新后的帖子

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

    关于Java-从文件中读取大数对并用链表表示它们,得到每对的和与积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396842/

    相关文章:

    java - 仅从文本字段获取特定信息

    java - 使用 javax.xml.transform.Transformer 缩进文本子节点

    c - 用于基数排序的链表中的指针上的 EXC_BAD_ACCESS

    c - 串行通讯不工作。读取文件出错

    java.util.NoSuchElementException - 在 XSSFSheet 上读取

    c - 同步ReadFile读取的字节数

    java - 基本 FFmpeg 转换错误?

    java - 有没有办法让我能够对 System.in 输入和 FileInputStream 输入使用相同的扫描仪?

    C 结构体和 union 在一起

    clojure - Clojure 中更高效的 split-with