написать несколько итераций массива по порядку - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь исправить часть программы, которую я пишу, цель которой - прочитать текстовый файл и поместить его содержимое в новый текстовый файл, количество раз равное целому числу, записанному в последней строкетекстовый файл.Когда я проверяю свой вывод, вместо

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 и так далее, когда я думал, что он напишет нулевой элемент, затем элемент 1 и т. д., а затем вернемся к нулевому элементу для второй итерации внешнего цикла.Я что-то упускаю в настройках цикла?

1 Ответ

0 голосов
/ 25 февраля 2019

Прежде всего

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<String>.

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

Просто продолжайте использовать copiedLines List.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...