0

特定の要素リストの要素数を計算するコードを作成しました。入力: test- テスト ケースの数 num- 1 つのテスト ケース内の要素の数 numarr- 値 (その積の因子が検出される) がスペースで分割される文字列。

入力が次の場合:

  • 3
  • 3
  • 3 5 7
  • 3
  • 2 4 6
  • 2
  • 5 5 理想的には、出力は
  • 8
  • 10
  • 3

ただし、例外は次のとおりです。

 Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:31)


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int test = 0;

        Scanner scn = new Scanner(System.in);
        if (scn.hasNextLine())
            test = scn.nextInt();
        int op = 0;
        int[] out = new int[test];
        while ((test <= 100) && (test > 0)) {
            int num = 0;
            if (scn.hasNextLine())
                num = scn.nextInt();
            if (num <= 10) {
                String numarr = null;
                Scanner sc = new Scanner(System.in);
                if (sc.hasNextLine())
                    numarr = sc.nextLine();

                String splitt[] = null;
                if (numarr != null)

                splitt = numarr.split(" ");                           <--ERROR!!!
                if (splitt.length == num) {
                    double[] arr = new double[splitt.length];
                    int i = 0;
                    while (i < splitt.length) {
                        arr[i] = Double.parseDouble(splitt[i]);

                        ++i;
                    }

                    i = 0;
                    double prod = 1;
                    while (i < arr.length) {
                        prod *= arr[i];
                        ++i;
                    }

                    double[] factor = new double[100000];
                    int value = 0;
                    pfac(prod, factor);
                    for (i = 0; (i < factor.length) && (factor[i] != 0); ++i) {

                        value += 1;
                    }

                    out[op] = value;
                    op++;
                }
            }

            --test;
        }
        for (int i = 0; i < op; ++i) {
            System.out.println(out[i]);
        }

    }

    private static void pfac(double n, double[] factor) {
        int pos = 0;

        long max = (long) Math.sqrt(n);

        for (long i = 1; i <= max; ++i) {
            if (n % i == 0) {
                factor[pos] = i;
                pos += 1;
                if (n / i != i) {
                    factor[pos] = n / i;
                    pos += 1;
                }
            }
        }
    }

}
4

2 に答える 2

1

あなたのコードが何をしているか考えてみてください:

if(numarr!=null)
    splitt=numarr.split(" ");
if(splitt.length==num)
{
...
}

numarr が null の場合、分割を行っていません。つまり、splitt を使い始めても null のままです。

全体を {} に入れます。

if(numarr!=null)
{
    splitt=numarr.split(" ");
    if(splitt.length==num)
    {
    ...
    }
}
于 2013-10-04T21:36:08.730 に答える