Как найти конец строки и выполнить сложение двух целых массивов в java?

#java #arrays #input #addition

#java #массивы #ввод #сложение

Вопрос:

Как узнать, сколько токенов в строке в приведенной ниже программе, а затем мне нужно добавить два целых массива, используя Java, поскольку я больше знаком с php, для меня это немного сложно. Также я получаю входные данные из текстового файла. Следовательно, вот как у меня пока работает моя программа.

Входной файл будет содержать несколько строк, подобных этой 3736 17234 29823 84478 123745 2371 34237 823712

 import java.io.*;
    import java.util.*;

    public class Sum {

    //must use a constant for the length of the array
    static int[] total= new int[25];
    static int[] val = new int[25];
    static int line= 0;
    static int word =0;
    public static void main(String[] args) throws FileNotFoundException {
    Scanner input = new Scanner(new File("Input.txt"));
//                  System.out.println("0");
    processFile(input);
    }

    public static void processFile(Scanner input) {
    //in this method you need to read your input file
    //. read one line at a time and call the method processLine to


    while (input.hasNextLine()) 
                {

                line  ;
                String line = input.nextLine();
                Scanner lineScan = new Scanner(line);
                                //System.out.println("1");
                processLine(input);
                //System.out.println(line);
                }


    }

    public static void processLine(Scanner data) {
    //in this method you read tokens from line that has been passed to
    // this methd as the parameter. method transfer needs to be called to
    // transfer each token into an array of length DIGITS. Note that in a
    // line you might only have one token


        while(data.hasNext())
        {

          String x = data.next();
                        //System.out.println("2");
          transfer(x,val);
        }


    }

    public static void transfer(String data, int[] digits) {
    //This method transfer the string into array of integers value.

    int len = data.length();
    int n=24;
    for(int i=0;i<=n;i  )
        digits[i]=0;
                    //System.out.println("3");
        while(len>0)
        {
            //  System.out.println(data.charAt(len-1));
            char z=data.charAt(len-1);

            int d = Character.digit (z, 10); 

            digits[n]=d ;   
            len=len-1;
            n=n-1;          
        }
        for(int i=0;i<=n;i  )
            digits[i]=0;

        for(int i=0;i<25;i  )
        {
            //System.out.println(digits[i]);
        }
        System.out.println("n");

            add(digits);

    }
    public static void add(int[] digits) {
            word  ;
            if (word>1)
            {
                for(int i=0; i<= 4; i  )
                {
                    total= total[i] digits[i];
                }


            }   
            if(word==0)
                total=digits;       
    }

    public static void print(int[] digits) {
    //For printing 


    }

    }
  

Комментарии:

1. Ваш add() метод принимает только 1 аргумент, вы имели в виду, что он принимает 2 аргумента (2 массива для добавления)?

2. Я не могу заставить его принимать 2 аргумента, поскольку в любой момент доступен только 1 токен. Вы можете подсказать, как это может принимать 2 аргумента. Является ли хранение хорошим способом в этом случае?

3. Пожалуйста, смотрите мой ответ ниже! Почему вы хотите хранить целые числа в виде строк?

4. Входные данные иногда настолько огромны, что их невозможно сохранить в целых числах.

5. Используйте long вместо int, если это так.

Ответ №1:

Используйте цикл for, чтобы просмотреть 2 массива и добавить каждый элемент.

Краткий пример кода ниже:

        private int[] sumTwoArrays(int [] a, int [] b){
            if(a.length!=b.length){
               throw new IllegalArgumentException("Arrays are not of same length!");
            }
            int[] sum = new int[a.length];
            for(int i=0;i<a.length;i  ){
               sum[i] = a[i] b[i];
            }
            return sum;
       }
  

ОБНОВЛЕНИЕ: После комментариев ниже я добавил другой метод добавления только элементов в один массив.

 private void readFile(){
    long sum=0;
    //do your FILE I/O here
    //for each line you read into an array called input[] you call this method
    sum  = sumArray(input);
    System.out.println(sum);
}

 private long sumArray(long [] a){
          long sum=0;
           for(int i=0;i<a.length;i  ){
            sum  = a[i];
           }
           return sum;
  }
  

Комментарии:

1. Массивы будут иметь максимальную длину 25. Цикл for определенно помог и работает, но он обновляет его последними двумя значениями массива. Я ищу способ узнать, сколько токенов в строке, чтобы я мог выполнить правильное сложение. Я также добавлю некоторые входные данные.

2. Я понятия не имею, что вы подразумеваете под последними 2 значениями обновления. Вам нужно общее количество всех элементов в 2 массивах или сумма соответствующих индексов?

3. Как вы видите на входе, в текстовом файле есть несколько таких строк. Мне нужна сумма значений в каждой строке. Итак, если на входе 1 2 3, на выходе 1 2 3 = 6

4. Хорошо, итак, зачем вам для этого нужны массивы? Просто сохраняйте счетчик сумм и добавляйте числа по мере их чтения из файла.

5. Спасибо за ваши ответы. Это требование в данном случае. Ничего не мог с собой поделать. 🙂

Ответ №2:

Вы усложнили это намного больше, чем необходимо. Для начала вы можете удалить ссылки на несколько функций, класс scanner действительно может разобрать ваш файл на целые числа и может читать несколько строк — так что вам не нужен новый сканер для каждой строки.

Я думаю, вы можете просто иметь по одному сканеру на файл, а затем постоянно использовать функцию Scanner.nextInt() для поиска следующего целого значения в этом файле.

Теперь, в зависимости от вашего определения add, вы могли бы сделать две вещи.

  1. Если вы пытаетесь добавить соответствующие элементы каждого массива, чтобы получить третий массив, где x [i] = y [i] z [i], тогда вам просто нужен цикл for с предыдущей инструкцией в нем. Не забудьте, конечно, подставить настоящие имена переменных.
  2. Если вы пытаетесь сложить все целые числа в обоих массивах, чтобы получить одно целое число (или long), вы могли бы использовать два цикла for, один за другим, и постоянно добавлять текущий элемент текущего массива в переменную.