嵌套for循环中的字符串变量未被修改

时间:2016-02-20 02:39:59

标签: java arrays split nested-loops

在我讨论这个问题之前,让我来描述代码应该解决的问题。

代码应该使用以下语法从文件中获取输入:

 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 个答案:

答案 0 :(得分:0)

您需要使用intArray2[i]&amp;添加到intArray2[j]而不是result&amp; intArray[i]时{0}} 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];

答案 1 :(得分:0)

这可能会有所帮助

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);