2016-10-13 24 views
2

JavaのScannerクラスを使用して、カンマで区切られたdouble値とint値をスキャンしようとしています。Java - カンマで区切られたカンマ区切りのdouble値とint値

次のScanner input = new Scanner(System.in).useDelimiter("\\D");は、,で区切られたint値のみをスキャンできます。例えば入力= 1000,2,3

doubleとint値を,で区切ってスキャンするにはどうすればよいですか?入力= 1000.00,3.25,5または100.00,2,3.5

私は次のことを試してみましたが、彼らは仕事していないようです:

Scanner input = new Scanner(System.in).useDelimiter(","); 
Scanner input = new Scanner(System.in).useDelimiter("\\,"); 
Scanner input = new Scanner(System.in).useDelimiter("[,]"); 

これらのコードを掛けるように思わ使用。サンプル入力を入力すると、スキャンされた変数に対してSystem.out.printlnが実行されませんでした。

以下

は私のサンプルコードです:

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

public class Solution { 
    public static void main(String args[]) throws Exception { 
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */ 
    System.out.print("Enter your values: "); 
    // Scanner input = new Scanner(System.in).useDelimiter("\\D"); 
    Scanner input = new Scanner(System.in).useDelimiter(","); 
    // Scanner input = new Scanner(System.in).useDelimiter("\\,"); 
    // Scanner input = new Scanner(System.in).useDelimiter("[,]"); 

    double investmentAmount = input.nextDouble(); 
    double monthlyInterestRate = input.nextDouble()/100/12; 
    double numberOfYears = input.nextDouble(); 
    double duration = numberOfYears * 12; 

    double futureInvestmentValue = investmentAmount * Math.pow((1 + monthlyInterestRate), duration); 
    System.out.println(investmentAmount); 
    System.out.println(monthlyInterestRate); 
    System.out.println(numberOfYears); 
    System.out.println(duration); 
    System.out.println("Accumulated value is " + futureInvestmentValue); 
    } 
} 

ソリューションは、以下のスキャナラインの更新

はそれを固定しているように見えるが見つかりました:

Scanner input = new Scanner(System.in).useDelimiter("[,\n]"); 
+1

あなたのコードは私のために正常に動作しています。あなたの入力と出力は何ですか? – 4castle

+0

@ 4castle、私の入力はすべて1行に1つの入力として '1000.00,3.25,1'です。入力を入力した後にコードがハングするので、出力はありません。私はOpenJDK Java 7になっています – j7an

+0

@ eduardo-dennisコードが動作すると思います。最後のnextDouble()の後にどのようにコード化し、入力として '1000.00,3.25,1'を1行に入力するかというように、' input.nextLine(); 'でハングアップします。 – j7an

答えて

1

ほとんどの場合、あなたはLocaleを持っていますScannerはカンマ区切りでダブルスを解析しようとしますが、カンマをスキャナー区画。

Scanner input = new Scanner(System.in) 
     .useDelimiter(",") 
     .useLocale(Locale.ENGLISH); 

これでダブルスペース区切り文字がドットに設定され、カンマ区切りのダブルスは正常に動作するはずです。

入力の最後にカンマを配置して、最後の値を解析するようにしてください。 1000.00,3.25,5,(あなたの入力がうまくいかない主な原因でもあるかもしれません)

+0

これを計算していただきありがとうございます。カンマで入力終了を行う。 – j7an

0

nextDouble()は最後の行を消費しないため、直面した問題があります。最後にinput.nextLine()を追加して、期待どおりに動作するようにしてください。

/* Enter your code here. Read input from STDIN. Print output to STDOUT */ 
System.out.print("Enter your values: "); 
Scanner input = new Scanner(System.in).useDelimiter(","); 

double investmentAmount = input.nextDouble(); 
double monthlyInterestRate = input.nextDouble()/100/12; 
double numberOfYears = input.nextDouble(); 
input.nextLine(); 
double duration = numberOfYears * 12; 

double futureInvestmentValue = investmentAmount * Math.pow((1 + monthlyInterestRate), duration); 
System.out.println(investmentAmount); 
System.out.println(monthlyInterestRate); 
System.out.println(numberOfYears); 
System.out.println(duration); 
System.out.println("Accumulated value is " + futureInvestmentValue); 

Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo() methods

+0

はい、オンラインですべての入力を受け入れる必要があります。申し訳ありませんが明確ではありません。 – j7an

+0

あなたの入力がカンマで終わったことが分かりました。私はそれを試み、それは働いた。入力をカンマで終了しない場合。それは動作しません。 – j7an

+0

@ j7an私の編集をチェックしてください。 input.nextLine()を追加すると、その問題を修正できます。 –

関連する問題