私のアプリケーションはエンドユーザーから文字列として番号を取得します。数字が数字でない場合は、数字を入力するとエラーメッセージが表示されます。これはNumberFormatExceptionを使用して修正できます。もう1つのシナリオは、ユーザーがLong.MAX値より大きい値を入力した場合です。どのように私はこのケースをチェックし、Long.MAX値よりも小さい数値を入力するエラーメッセージをユーザーに与えることができますか?私はこの問題を解決するために第三者またはオープンソースのlibを使用すべきではありません。彼らが解決策を提供している場合でも、どのように解決していますか?NumberがLong.MAXの値よりも大きいかどうかを検出する方法
答えて
ユーザBigInteger
は、ユーザ入力を解析してはLong.MAX_VALUEと結果を比較する
String userInput = ...;
BigInteger bigInt = new BigInteger(userInput);
if(bigInt.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0) {
throw new Exception(userInput + ": value is too large");
}
入力した数値がLong.MAX
より大きい場合は、次に何をしますか?どこに格納するか分からないと、エラーが発生します。
より良い方法は、ユーザー入力が範囲内にあるかどうかを確認することです。 Long.MAX
より大きい場合は、BigInteger
入力された値が範囲内にあるかどうかを確認する方法は? –
私は@ Yaroslav Rudykhの答えが同じようにそれをしたと思います。 – FallAndLearn
はい。それを試してみました。期待どおりに働く。ありがとう –
を使用してmax値にアクセスし、条件でユーザーが入力した値を確認できます。
入力された入力が範囲内にあるかどうかをチェックするにはどうすればよいですか? –
あるJava
コア
public static void main(String[] args) {
System.out.println(isLargerThanLONGMAXVALUE("9223372036854775807")); // false
System.out.println(isLargerThanLONGMAXVALUE("9223372036854775806")); // false
System.out.println(isLargerThanLONGMAXVALUE("9223372036854775808")); // true
System.out.println(isLargerThanLONGMAXVALUE("645459223372036854775807")); // true
System.out.println(isLargerThanLONGMAXVALUE("922")); // false
}
public static boolean isLargerThanLONGMAXVALUE (String number) {
String longMax = String.valueOf(Long.MAX_VALUE);
if (number.length() > longMax.length()) return true;
if (number.length() < longMax.length()) return false;
long a, b = 0;
for (int i = 1 ; i < number.length() ; i++){
a = Long.parseLong(number.substring(0, i));
b = Long.parseLong(longMax.substring(0, i));
if (a > b) return true;
}
if (Integer.parseInt(number.substring(number.length()-1, number.length())) >
Integer.parseInt(longMax.substring(number.length()-1, number.length())))
return true;
return false;
}
として文字列を扱う以外の余分なクラスを使用せずに別の溶液BigInteger
と比較を行うのが最善の方法です。
public boolean isInRange(String number) {
String maxValue = Long.toString(Long.MAX_VALUE);
number = number.replaceFirst("^0+", ""); // remove leading zeroes
return number.length() < maxValue.length() ||
(number.length() == maxValue.length() &&
number.compareTo(maxValue) <= 0);
}
これはnumber
が完全桁の(負符号)で構成されていないことを前提としています。しかし、ここでもう一つは、ちょうど何かを達成するために、通常は複数の方法があることを示すことです。
使用BigInteger
とlongValueExact()
方法、およびキャッチ例外:
public static void main(String[] args) {
test("123");
test("9223372036854775807"); // Long.MAX_VALUE
test("-9223372036854775808"); // Long.MIN_VALUE
test("9223372036854775808"); // Long.MAX_VALUE + 1
test("-9223372036854775809"); // Long.MIN_VALUE - 1
test("abc");
}
private static void test(String input) {
long longVal;
try {
longVal = new BigInteger(input).longValueExact();
} catch (NumberFormatException e) {
System.out.println("Value is not a valid integer number: " + input);
return;
} catch (ArithmeticException e) {
System.out.println("Value exceeds range of long: " + input);
return;
}
System.out.println("Got valid long value: " + longVal);
}
OUTPUT
Got valid long value: 123
Got valid long value: 9223372036854775807
Got valid long value: -9223372036854775808
Value exceeds range of long: 9223372036854775808
Value exceeds range of long: -9223372036854775809
Value is not a valid integer number: abc
このソリューションも期待どおりに機能します。すばらしいです。しかし、どちらがパフォーマンス/メモリによって優れていますか? 1. long.MAX argまたは2. longValueExactメソッドを使用したcompareToメソッド –
- 1. pythonでnumberを検証する方法は0より大きいですか?
- 2. 1つの値が他の値よりも大きいかどうかをチェックする方法
- 3. 数値が別の数値よりも一定量大きいかどうかをチェックする方法は?
- 4. POSTMANでオブジェクトのサイズが特定の数値よりも大きいかどうかをテストする方法
- 5. オーディオが大きすぎるかどうかを検出する方法?
- 6. 通常の出力値よりも大きいですか?
- 7. 値がアリストの他のすべての値よりもPythonの特定の値より大きいかどうかを確認する方法
- 8. javascriptを使用して値が別の値より大きいかどうかを確認する方法
- 9. バージョンの確認方法が基本値よりも大きいですか?
- 10. 1つの変数が別の変数よりも大きいかどうかを確認する方法
- 11. 子divが親よりも広いかどうかを検出しますか?
- 12. RUBY_VERSIONが特定のバージョンよりも大きいかどうかを確認する方法は?
- 13. 現在の時刻が時刻よりも大きいかどうかを確認する方法
- 14. OSのバージョンがWindows XP SP2よりも大きいかどうかをテストする方法
- 15. Espresso:recylerviewの子ビューの整数値が4000より大きいかどうかを確認する方法
- 16. データアノテーションを使用して、ある日付プロパティが別の日付プロパティよりも大きいかどうかを検証する方法はありますか?
- 17. レルム第1列の値が第2列の値よりも大きいかどうか確認します。
- 18. char *が他の文字列/数値よりも大きいかどうかを比較するには?
- 19. double値が0より大きいかどうかを確認する簡単な方法
- 20. 炭素ラベリングデータベースでcreated_atより大きいかどうかをチェックする方法
- 21. 最大値より大きい数値を表す方法
- 22. mysqlのある列の値が別の列の値よりも大きいかどうかを確認する方法
- 23. pandas groupbyの値よりも大きいアイテムを数えよう
- 24. 浮動小数点値がInteger.MAX_VALUEより大きいかどうかを知る方法?
- 25. 分解値のカウントが0より大きいかどうかをチェック
- 26. セルAがセルBとCの値よりも大きいかどうかをチェック
- 27. datetimepickerの値がdatetimepickerの値よりも大きい場合、
- 28. Sqlの計算値が列の値よりも大きい
- 29. 値がRより大きく変更されたかどうかを確認する方法R
- 30. ArrayListに格納されている値が数値より大きいかどうかを確認する
はい。この解決策はうまくいきます。これはInteger/Long/Doubleの代わりにBigIntegerだけを使用できることを示していますか? BigIntegerを使うことができますか? –
'Long'オブジェクトは' Long.MAX_VALUE'より大きい値を保持できませんので、入力を解析し、入力があなたの制限を満たすかどうかを検出するために 'BigInteger'を使用しなければなりません。その後、 'bigInt.longValue()'を呼び出して 'long'値を取得し、それをさらに処理します。 –
誰も' 'throw new Exception(...)'をコードに書くべきではありません。代わりに、Exceptionのサブクラス(IllegalArgumentExceptionのような)を常に投げてください。 Throwing Exceptionは、例外を捕捉する他のコードを強制し、NullPointerExceptionsのようなプログラマーのエラーを見たり修正したりするのを防ぎます。 – VGR