Строковая переменная во вложенном цикле не изменяется

Прежде чем перейти к проблеме, позвольте мне описать проблему, которую должен решать код.

Код должен принимать входные данные из файла в следующем синтаксисе:

 1,2,3,4;5

Код должен взять целое число после точки с запятой и присвоить его переменной, что он и делает. Затем предполагается, что код принимает значения перед точкой с запятой и находит и возвращает все две пары целых чисел, которые складываются со значением после точки с запятой.

Пример: если вход

1,2,3,4;5

тогда вывод должен быть

1,4;3,2

У меня проблема в том, что мой String result не редактируется вложенным for циклы внутри кода. Я не получаю ошибок времени компиляции или выполнения. Он просто не редактирует String result и я не могу понять, почему. Ребята, не могли бы вы взглянуть?

import java.util.*;
import java.io.*;

public class NumberPairs2 {
    public static void main (String[] args) throws IOException { 
        File file = new File("C:/Users/James/Desktop/txt.txt"); // Takes in a file as input
        BufferedReader buffer = new BufferedReader(new FileReader(file));
        String line;
        while ((line = buffer.readLine()) != null) {
            String result = ""; // creates an empty string
            line = line.trim(); // set the file contents equal to null
            if (line.length() != 0){
                int sumTest = Integer.parseInt(line.substring(line.indexOf(";") + 1));
                String[] intArray = line.split(";");
                String[] intArray2 = intArray[0].split(",");
                for (int i = 0; i < intArray2.length - 1; i++){
                    for(int j = i + 1; i < intArray2.length; i++){
                        if (intArray2[i] != "," && intArray2[j] != "," && Integer.parseInt(intArray2[i]) + Integer.parseInt(intArray2[j]) == sumTest){
                            result += intArray[i] + ", " + intArray[j] + ";";
                            System.out.println(result);
                        }
                    }
                }


                //int compare = ()

            }
            else {
                result = null;
                System.out.println(result);
            }

        }


    }
}

2 ответа

Вам нужно использовать intArray2[i] & intArray2[j] при добавлении в result вместо intArray[i] & intArray[j], Ваш код в настоящее время получает ArrayIndexOutOfBoundsException пытаясь использовать intArray2 индексы в intArray,

for (int i = 0; i < intArray2.length - 1; i++){
    for(int j = i + 1; j < intArray2.length; j++){
        if (Integer.parseInt(intArray2[i]) + Integer.parseInt(intArray2[j]) == sumTest){ 
            result += intArray2[i] + ", " + intArray2[j] + ";";
            System.out.println(result);
        }
    }
}

одним из вариантов удаления последней точки с запятой будет добавление к результату следующим образом

//if not 1st pair, add semicolon
if(!result.equals("")){
    result += "; ";
}
result += intArray2[i] + ", " + intArray2[j];

Это может помочь

for (int i = 0; i < intArray2.length - 1; i++){
      for(int j = i + 1; j < intArray2.length; j++){
         if (Integer.parseInt(intArray2[i]) + Integer.parseInt(intArray2[j]) == sumTest){
           result += intArray2[i] + ", " + intArray2[j] + ";";
           }
      }
 }
 System.out.println(result);
Другие вопросы по тегам