Как найти конец строки и выполнить добавление двух целочисленных массивов в Java? - PullRequest
0 голосов
/ 25 апреля 2011

Как найти количество токенов в строке в приведенной ниже программе, а затем Мне нужно добавить два целочисленных массива с использованием 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 


    }

    }

Ответы [ 2 ]

2 голосов
/ 25 апреля 2011

Используйте цикл 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 апреля 2011

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

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

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

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