【问题标题】:java replacing elements of an arrayjava替换数组的元素
【发布时间】:2018-11-06 23:28:43
【问题描述】:

主要问题将在底部。从下面的文本文件中,假设第一个整数是 a,第二个是 b,第三个是 c,依此类推。该程序获取 a、b 和 c,解析它们,将它们放入 myCalculations 方法中,该方法返回一个带有两个整数的字符串。解析字符串,将 a 和 b 替换为所述返回字符串中的整数,然后循环的下一次迭代将采用 a 和 b 的新值以及整数 d。这将一直持续到将 a 和 b 打印给用户为止。

两个文本文件的输入如下:

文本文件格式如下:

200 345 
36
45
36
21

这是从文件中读入的内容,它按预期工作,我把它放在这里是为了上下文。 tl;dr is results[] 是第一行的整数数组。 (int a 和 b)

public class conflictTrial
{
    BufferedReader in;
    public static void conflictTrial() throws FileNotFoundException 
    {
        System.out.print('\u000c');
        System.out.println("please enter the name of the text file you wish you import. Choose either costs.txt or lotsacosts.txt Nothing else");
        Scanner keyboard = new Scanner(System.in);
        String filename = keyboard.nextLine();
        File file = new File(filename);
        BufferedReader in = new BufferedReader(new FileReader(file));

        String element1 = null;
        try {
            element1 = in.readLine();
        }catch (Exception e) {
            //  handle exception
        }

        String[] firstLine = element1.split(" ");

        Arrays.stream(firstLine).forEach(fl -> {
            //System.out.println("First line element: \t\t\t" + fl);
        });

        int[] results = new int[100];
        for (int i = 0; i < firstLine.length; i++) 
        {
            try {
                int stuff = Integer.parseInt(firstLine[i]);
                results[i] = stuff;
            }
            catch (NumberFormatException nfe) {
                // handle error   
            }
        }     

bufferreader读入文件,for循环将整数解析成数组results[]。接下来,解析剩余的行并调用方法 myCalculations:

 String otherElement = null;
 int[] aliveSoldiers = new int[100];
 int [] things = new int [100];
 int[] newResults = new int[100];
 try {
      while ((otherElement = in.readLine()) != null) {       // main loop
          System.out.println("Line to process:\t\t\t" + otherElement);
          String[] arr = otherElement.split(" ");

          for (int k = 0; k <arr.length; k++) 
          {
              int thingsResult = Integer.parseInt(arr[k]);
              things[k] = thingsResult;
              System.out.println("number of days: \t\t\t"+things[k]);

              aliveSoldiers[0] = results[0];
              aliveSoldiers[1] = results[1];
              String returnAliveSoliders = myCalculations(aliveSoldiers[0], aliveSoldiers[1], things[k]);
              System.out.println("return soldiers alive: \t\t"+returnAliveSoliders);

              String[] newItems = returnAliveSoliders.split(" ");


              for (int f = 0; f < newItems.length; f++) 
              {
                  int newParse = Integer.parseInt(newItems[f]);
                  newResults[f] = newParse;
                  aliveSoldiers[0] = newResults[0];
                  aliveSoldiers[1] = newResults[1];
              } 
              k++;
          }
       } 
   }
    catch (Exception e) {
       e.printStackTrace();
   }
}

当前代码执行以下操作:第一次主循环迭代采用整数 a、b 和 c,第二次迭代采用与整数 d 相同的整数 a 和 b(200 和 345,初始值),第三次迭代采用和 a 和 b 具有相同的值和整数 e。我试图用以下代码解决这个问题:

aliveSoldiers[0] = newResults[0];
aliveSoldiers[1] = newResults[1];

我需要从方法 myCalculations 中获取整数(在 k-modifier 循环中解析),并将它们覆盖到 aliveSoldiers[0] 和 aliveSoldiers [1] 中,以便程序读取下一行,获取新的整数,然后一直持续到没有剩余天数为止。

【问题讨论】:

  • 您更新了newResult[f],但始终在下一行使用newResult[0]newResult[1]。您能否尝试总结一下需求。看看什么是minimal reproducible example,包括示例。

标签: java arrays loops


【解决方案1】:

老实说,我不明白整个练习应该做什么,但是由于您使用的索引,您启发的代码可能是错误的:这些索引始终是 0 和 1,即使循环是通过其他一些索引执行的。在第二个代码 sn-p 的末尾,f-for 在增加的索引“f”处修改数组“newResults”,但该数组总是在相同的索引处读取:0 然后 1。所以,如果“f " 获得比 "1" 更高的值,然后 "aliveSoldiers" 的元素保持不变。

特别是,aliveSoldiers 只对前两个索引进行了修改,其他索引根本没有使用。

您需要类似堆栈或类似队列的行为吗?

【讨论】:

  • 这完全不是这样,但我认为这是有道理的:假设a和b是士兵和弹射器,c是战斗的天数。 a 和 b 的死亡人数是战斗持续天数的函数。在调用 myCalculations 后,它返回剩余士兵,读取下一个整数 (d) 并计算第二次战斗后剩余的士兵。我不知道我需要什么,甚至不知道出了什么问题。
  • 在 f-for 修饰符的末尾这样替换这个数组的元素有问题吗?另外,使用 array[100] 我只是选择了一个大数字,所以它不会被最大化。
  • 在这种情况下,我建议您使用单个变量。如果您需要在每次迭代中跟踪剩余的士兵,则使用 2 个数组(“a”代表“士兵”,“b”代表“弹射器”)并使用循环的索引,即 k 或计数器计算已经过去了多少天(有多少行是红色的)。如果不需要轨道,则使用 2 int 代替。
猜你喜欢
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 2017-05-14
  • 2021-10-20
  • 2021-11-14
相关资源
最近更新 更多