-2

私はJavaが初めてで、私がやろうとしてきたこと:

tempTrailerArrString[] = {"12.0 1.1", "24.51", "34.12", "82.87 231.2 1.1 2.2"} です。

の各要素はtempTrailerArrScanner オブジェクトに変換されますtrScan

tempTrailerArr の各要素の最初の double は、 という Double[] に格納されtrailerValsます。

したがって、望ましい結果は次のようになりますtempTrailerArr= {12.0 24.51 34.12 82.87}

しかし、以下のコードは終了しません。理由がわかりません。

        for (int j=0; j<tempTrailerArr.length; j++) {
        Scanner trScan = new Scanner(tempTrailerArr[j]);
        switch (j) {
        case 0: 
        case 1: 
        case 2: 
        case 3: this.trailerVals[j] = trScan.nextDouble();
                break;
        }
    }
4

3 に答える 3

0

あなたのコードを説明するには:

// loop start :
for (int j=0; j<tempTrailerArr.length; j++) {

    // creating a new Scanner object every time this loop starts
    // this scanner starts scanning the String value received from this element in the array
    Scanner trScan = new Scanner(tempTrailerArr[j]);

    // checks for the numerical value of J :
    switch (j) {

    // if j == 0, nothing happens, and go for the next case (no break mentioned)
    case 0: 

    // if j == 1, nothing happens, and go for the next case (no break mentioned)
    case 1: 

    // if j == 2, nothing happens, and go for the next case (no break mentioned)
    case 2: 

    // if j == 3 (and this will be true in case 0, case 1, case 2) 
    // trailerVals[j] = next double (if no double was found, an "InputMismatchException will be thrown
    // to use nextDouble(), first you should check if trScan.hasNextDouble(),
    // if true, then add double, else do nothing
    case 3: this.trailerVals[j] = trScan.nextDouble();

    // every time j will be less than or equal to 3, it will reach this point
       break;
    }
}

これはあなたの質問だったのでコードを説明しましたが、文字列配列を部分に分割したい場合は、String.split() メソッドを使用するか、(for:each) ループを使用して値を確認し、必要な配列

このコードを続行しようとしないでください。無駄な努力が必要です。

于 2013-09-09T21:35:28.740 に答える
0

できることは、分割機能を使用して、文字列を " " (スペース) で分割することです。

したがって、スキャナーは必要ありません。値を分割した後、値を String から double にキャストするだけです。

于 2013-09-09T21:20:57.220 に答える
0

「分割後に値を String から double にキャストする」のではなく、 Double.parseDouble(String s) を使用して文字列を double に変換する必要があります (この他のアプローチを使用した場合)。

String [] tempTrailerArr =  {"12.0 1.1", "24.51", "34.12", "82.87 231.2 1.1 2.2"};

String [] tempTrailerVals = null;
double[] trailerVals = new double [tempTrailerArr.length];

for (int i = 0 ; i < tempTrailerArr.length ; i ++)
{
    tempTrailerVals = tempTrailerArr[i].split(" ");
    // you should also add some error handling here - what if we can't convert the value to a double?
    trailerVals[i] = Double.parseDouble(tempTrailerVals[0]);

}
于 2013-09-09T21:30:36.953 に答える