Java, заменяющий элементы массива - PullRequest
0 голосов
/ 28 мая 2018

Основной вопрос будет внизу.Из приведенного ниже текстового файла предположим, что первое целое число равно a, второе - b, третье - c и так далее.программа берет a, b и c, анализирует их, помещает их в метод myCalculations, который возвращает строку с двумя целыми числами.Строка анализируется, a и b заменяются целыми числами в указанной возвращаемой строке, затем следующая итерация цикла примет новые значения для a и b и целое число d.Это будет продолжаться до конца, когда a и b будут напечатаны пользователю.

Ввод из двух текстовых файлов следующий:

Формат текстового файла следующий:

200 345 
36
45
36
21

Вот чтение из файла, оно работает как задумано, я поставил его здесь для контекста.tl; dr - результаты [] - целочисленный массив для первой строки.(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   
            }
        }     

Считыватель буферов читает в файле, цикл for анализирует целые числа в результаты массива [].Затем, остальные строки анализируются и вызывается метод 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, вторая итерация принимает те же самые целые числа aи b (200 и 345, начальные значения) с целым числом d, третья итерация принимает те же значения для и a и b с целым числом e.Я попытался решить эту проблему с помощью следующего кода:

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

Мне нужно взять целые числа из метода myCalculations (анализируемого в цикле k-модификатора) и перезаписать их в aliveSoldiers [0] иaliveSoldiers [1], поэтому программа читает следующую строку, получает новые целые числа и продолжается до тех пор, пока не останется больше дней.

1 Ответ

0 голосов
/ 28 мая 2018

Честно говоря, я не понял, что должно делать все упражнение, но код, который Вы использовали, может быть неправильным из-за используемых вами индексов: эти индексы всегда равны 0 и 1, даже если циклы выполняются через некоторые другие индексы.В конце второго фрагмента кода f-for модифицирует массив «newResults» с возрастающим индексом «f», но этот массив всегда читается с одним и тем же индексом: 0 и затем 1. Таким образом, если «f» получаетболее высокие значения, чем «1», чем у элементов «aliveSoldiers», остаются без изменений.

В частности, aliveSoldiers изменяется только для первых двух индексов, остальные индексы вообще не используются.

Вам нужно поведение, подобное стеку или очереди?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...