web-dev-qa-db-ja.com

intまたはdoubleの入力を読み取るにはどうすればよいですか?

キーボードから入力を取得する必要があるプログラムを書いています。数字を取り込む必要がありますが、それがintなのかdoubleなのかわかりません。これが私が持っているコードです(その特定の部分のために):

_import Java.io.*;
import Java.util.*;

//...
Scanner input  = new Scanner(System.in); 
int choice = input.nextInt();
_

Stringを取得してparseInt()またはparseDouble()を実行できることは知っていますが、どちらになるかはわかりません。

5
newplayer12132

何であれ、doubleを使用するだけです。整数値にdoubleを使用しても、顕著な損失はありません。

_Scanner input = new Scanner(System.in); 
double choice = input.nextDouble();
_

次に、ダブルを取得したかどうかを知る必要がある場合は、 _Math.floor_ を使用して確認できます。

_if (choice == Math.floor(choice)) {
    int choiceInt = (int) choice);
    // treat it as an int
}
_

catching NumberFormatException をいじらないでください。文字列でピリオドを検索しないでください(たとえば、入力が_1e-3_これはdouble(_0.001_)ですが、ピリオドはありません。doubleとして解析して次に進みます。

また、nextInt()nextDouble()の両方が改行をキャプチャしないことを忘れないでください。したがって、改行を使用してキャプチャする必要があります。 nextLine()使用後。

3
durron597

ええと、intもdoubleなので、すべてがdoubleであると仮定すると、ロジックに問題はありません。このような:

import Java.io.*;
import Java.util.*;
Scanner input  = new Scanner(System.in); 
double choice = input.nextDouble();

何らかの理由で入力を整数にする必要がある場合にのみ、複雑になります。そして、intをテストするためのparseInt()は問題ありません。

5
Paul Sasik

フロア関数を使用して、ダブルかどうかを確認してみてください。わからない場合は、floor関数は基本的に10進数を切り捨てます。したがって、小数がある場合とない場合の数値を比較できます。それらが同じである場合、数値は整数として扱うことができ、そうでない場合は倍精度として扱うことができます(longのような大きな数値について心配する必要がないと仮定します)。

String choice = input.nextLine();

if (Double.parseDouble(choice) == Math.floor(Double.parseDouble(choice)) {
    //choice is an int
} else {
    //choice is a double
}
0
Zarwan

私がすることは、String入力を取得し、それをdoubleまたはintegerとして解析することです。

_String str = input.next();
int i = 0;
double d = 0d;
boolean isInt = false, isDouble = false;

try {
    // If the below method call doesn't throw an exception, we know that it's a valid integer
    i = Integer.parseInt(str);
    isInt = true
}catch(NumberFormatException e){
    try {
        // It wasn't in the right format for an integer, so let's try parsing it as a double
        d = Double.parseDouble(str);
        isDouble = true;
    }catch(NumberFormatException e){
        // An error was thrown when parsing it as a double, so it's neither an int or double
        System.out.println(str + " is neither an int or a double");
    }
}

// isInt and isDouble now store whether or not the input was an int or a double
// Both will be false if it wasn't a valid int or double
_

このようにして、doubleを解析するだけで整数の精度が失われないようにすることができ(doubleは整数とは異なる可能な値の範囲を持ちます)、有効な整数もdoubleも入力されていない場合を処理できます。

tryブロック内のコードによって例外がスローされた場合、catchブロック内のコードが実行されます。この場合、parseInt()メソッドによって例外がスローされた場合、2番目のtryブロックがあるcatchブロックでコードを実行します。 parseDouble()メソッドによって例外がスローされた場合、2番目のcatch-block内でコードを実行し、エラーメッセージを出力します。

0
SamTebbs33