【问题标题】:String variable in nested for loop not getting modified嵌套for循环中的字符串变量没有被修改
【发布时间】:2016-06-01 19:17:41
【问题描述】:

在我进入这个问题之前,让我描述一下代码应该解决的问题。

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

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

        }


    }
}

【问题讨论】:

  • 我已经编辑了你的问题。我试图用正确的代码格式将大段分成更小的块;我已经删除了很多“so”并修复了代码缩进。

标签: java arrays split nested-loops


【解决方案1】:

添加到result 时需要使用intArray2[i]intArray2[j],而不是intArray[i]intArray[j]。您的代码当前在尝试使用intArray 中的intArray2 索引时获得ArrayIndexOutOfBoundsException

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

【讨论】:

  • 我做了你的改变,递增的 j 和 i 比较是一个错误,我不想把它放在那里,但我修复了你所说的一切,结果仍然没有被编辑
  • 嗯...你试过result = result + ...;吗?我很确定 += 应该可以工作,但我没有看到任何其他看起来有问题的地方。
  • 那也行不通。这一点意义都没有
  • 我建议打印出数组和 sumTest 中的值以确保它们被正确添加。
  • 我已经打印出每个数组和 sumTest int 以查看它们是否被正确添加和修改并且它们是
【解决方案2】:

这可能会有所帮助

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

【讨论】:

  • 好的,它在 CodeEval 中工作,但由于某种原因不在我的编辑器中......一定是 ym 方面的问题。好的,我试图弄清楚如何将分号保留在数字之间,但在最后丢弃分号。我试过 System.out.println(result.substring(0, result.length()-1)));但我得到了一个索引超出范围的异常。有什么想法吗?
  • result = result.replaceAll("\\;$","");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 2023-03-15
  • 2018-12-25
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多