【问题标题】:write several iterations of an array in order按顺序编写数组的多次迭代
【发布时间】:2019-02-25 17:19:28
【问题描述】:

我正在尝试修复我正在编写的程序的一部分,其目的是读取一个文本文件并将其内容放入一个新的文本文件,其次数等于写入的最后一行的整数文本文件。当我检查我的输出时,而不是

abcd  
efgh  
ijkl  
mnop  
abcd  
efgh  
ijkl  
mnop  

我来了

abcd  
abcd  
efgh  
efgh  
ijkl  
ijkl  
mnop  
mnop  

我认为我可以使用一对嵌套的 for 循环来做到这一点,但第二个结果是我最终得到的。我将在下面粘贴我制作这些循环的代码部分。
public static void main(String[] args) throws IOException { BufferedReader read = new BufferedReader(new FileReader("src/MyPackage/sourcefile.txt")); File copy = new File("copy.txt"); BufferedWriter write = new BufferedWriter(new FileWriter(copy)); List<String> copiedLines = new ArrayList<>(); String line; while ((line = read.readLine()) != null) { copiedLines.add(line); } int numberOfCopies = copiedLines.size() - 1; int runCopy; runCopy = Integer.parseInt (copiedLines.get(copiedLines.size()-1)); for (int j=0; j < runCopy; j++) { for (int k=0; k < numberOfCopies; k++) { write.write(line); write.newLine(); } } write.close(); read.close(); } }
我很困惑为什么我的数组将元素 0 写入新文件所需的次数,然后移动到元素 1 等等,而我认为它会写入元素 0,然后是元素 1,依此类推,然后循环外循环的第二次迭代返回到元素零。我是否在循环设置中遗漏了一些明显的东西?

【问题讨论】:

    标签: java arrays loops text


    【解决方案1】:

    首先

    for (int i = 0; i < textLines.length; i++) {  
        numberOfCopies += 1;   
    }
    

    没有意义,就用numberOfCopies = textLines.length - 1(或者应该是什么)

    然后

    for (int j=0; j < runCopy; j++) {  
        for (int k=0; k < numberOfCopies; k++) {  
            write.write(line);  
            write.newLine();  
        }  
    }
    

    您在这里缺少line 声明?它在哪里?也许

    line = textLines[k];
    

    无论如何,使用

    for (int j=0; j < runCopy; j++) {
        for (int k=0; k < numberOfCopies; k++) {  
            final String line = textLines[k];
            write.write(line);  
            write.newLine();  
        }
    }
    

    你应该很高兴。但我认为你在这个问题中遗漏了太多。


    您还创建了一个 String[] 数组,因为您已经有一个 List&lt;String&gt;

    List<String> copiedLines = new ArrayList<>();  
    String line;  
    while ((line = read.readLine()) != null)  
    {
      copiedLines.add(line);  
    }  
    String[] textLines = copiedLines.toArray(new String[0]);  
    

    请继续使用copiedLines List

    【讨论】:

    • 你说得对,我应该使用numberOfCopies = textLines.length - 1 我想我只是在写它的时候没有看到。行声明靠近我的方法的开头,我不认为人们会想要整个方法,所以我想我只是发布循环。我应该编辑原始帖子以包含行声明还是应该在 cmets 中发布该部分?
    • @shuvool 尝试使用我的建议。
    • 我正在尝试您的建议,但遇到了使用 ArrayList 不想在非静态上下文中使用静态 get 的问题
    • @shuvool 静态获取?什么意思?
    • 最后一个元素应该只包含一个整数。我需要解析这个整数来确定外循环需要迭代的次数。我不确定,但我想我应该使用 ArrayList.get 方法来查找相关元素的内容,但它给了我错误“错误:(45、50)java:非静态方法获取(int) 不能从静态上下文中引用"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 2022-11-25
    相关资源
    最近更新 更多