Строковая переменная во вложенном цикле не изменяется
Прежде чем перейти к проблеме, позвольте мне описать проблему, которую должен решать код.
Код должен принимать входные данные из файла в следующем синтаксисе:
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);