キーボードから入力を取得する必要があるプログラムを書いています。数字を取り込む必要がありますが、それがint
なのかdouble
なのかわかりません。これが私が持っているコードです(その特定の部分のために):
_import Java.io.*;
import Java.util.*;
//...
Scanner input = new Scanner(System.in);
int choice = input.nextInt();
_
String
を取得してparseInt()
またはparseDouble()
を実行できることは知っていますが、どちらになるかはわかりません。
何であれ、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
}
_
catch
ing NumberFormatException
をいじらないでください。文字列でピリオドを検索しないでください(たとえば、入力が_1e-3
_これはdouble(_0.001
_)ですが、ピリオドはありません。double
として解析して次に進みます。
また、nextInt()
とnextDouble()
の両方が改行をキャプチャしないことを忘れないでください。したがって、改行を使用してキャプチャする必要があります。 nextLine()
使用後。
ええと、intもdoubleなので、すべてがdoubleであると仮定すると、ロジックに問題はありません。このような:
import Java.io.*;
import Java.util.*;
Scanner input = new Scanner(System.in);
double choice = input.nextDouble();
何らかの理由で入力を整数にする必要がある場合にのみ、複雑になります。そして、intをテストするためのparseInt()は問題ありません。
フロア関数を使用して、ダブルかどうかを確認してみてください。わからない場合は、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
}
私がすることは、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内でコードを実行し、エラーメッセージを出力します。