0

以下のプログラムで 1 行にいくつのトークンがあるかを調べてから、Java を使用して 2 つの整数配列を追加する必要があります。私は 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 


    }

    }
4

2 に答える 2

2

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

UPDATE : 以下のコメントの後、1 つの配列に要素だけを追加する方法について別の方法を追加しました。

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;
  }
于 2011-04-24T23:12:11.367 に答える
1

あなたはこれを必要以上に複雑にしました。まず、複数の関数参照を削除できます。スキャナー クラスは実際にファイルを整数に解析し、複数の行を読み取ることができます。そのため、行ごとに新しいスキャナーは必要ありません。

ファイルごとに 1 つの Scanner を使用するだけで、 Scanner.nextInt() 関数を常に使用して、そのファイル内の次の整数値を見つけることができると思います。

add の定義に応じて、できることが 2 つあります。

  1. 各配列の対応する要素を追加しようとする場合、x[i] = y[i] + z[i] である 3 番目の配列を使用するには、前のステートメントを含む for ループが必要です。もちろん、変数の実際の名前を置き換えることを忘れないでください。
  2. 両方の配列のすべての整数を合計して 1 つの整数 (または long) を取得しようとしている場合は、2 つの for ループを次々に使用して、現在の配列の現在の要素を常に変数に追加することができます。
于 2011-04-24T23:21:26.013 に答える