如何解決這個問題?
java.lang.NumberFormatException: at java.lang.NumberFormatException.forInputString(Unknown Source)
我正在做一些示例問題,我的代碼對于第一個字串和數字作業正常。(評論一個)
但是當更改新的字串和數字(??當前的)時,我收到了這個錯誤:
java.lang.NumberFormatException: For input string: "299858953917872714814599237991174513476623756395992135212546127959342974628712329595771672911914471"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at com.codejam.q1.problems.maxResult.removeDigit(maxResult.java:21)
at com.codejam.q1.problems.maxResult.main(maxResult.java:10)
這是我的代碼。我在哪里遺漏了什么?
public class maxResult {
public static void main(String[] args) {
//String str = "1231";
String str = "2998589353917872714814599237991174513476623756395992135212546127959342974628712329595771672911914471";
//char digit = '1';
char digit = '3';
System.out.println(removeDigit(str,digit));
}
public static String removeDigit(String number, char digit) {
long result = 0;
for(int i = 0; i<number.length(); i ) {
char num = number.charAt(i);
if(num == digit) {
String myStr = number.substring(0, i) number.substring(i 1);
try{
long myNum = Long.parseLong(myStr);
if(myNum > result) {
result = myNum;
}
}
catch (NumberFormatException ex){
ex.printStackTrace();
}
}
}
String s = String.valueOf(result);
return s;
}
}
即使我更改int為long但結果沒有變化。
uj5u.com熱心網友回復:
您可以使用 BigDecimal 而不是 long。
public class Application {
public static void main(String[] args) {
//String str = "1231";
String str = "2998589353917872714814599237991174513476623756395992135212546127959342974628712329595771672911914471";
//char digit = '1';
char digit = '3';
System.out.println(removeDigit(str,digit));
}
public static BigDecimal removeDigit(String number, char digit) {
BigDecimal result = BigDecimal.ZERO;
for(int i = 0; i<number.length(); i ) {
char num = number.charAt(i);
if(num == digit) {
String myStr = number.substring(0, i) number.substring(i 1);
try{
BigDecimal myNum = new BigDecimal(myStr);
if(myNum.compareTo(result)>0) {
result = myNum;
}
}
catch (NumberFormatException ex){
ex.printStackTrace();
}
}
}
return result;
}
}
uj5u.com熱心網友回復:
你的數字太大了,不能長值。最大多頭值為 9,223,372,036,854,775,807。您可以使用 BigInteger,它基本上沒有限制。
使用long
long result = 0;
// ...
long myNum = Long.parseLong(myStr);
if(myNum > result) {
result = myNum;
}
// ...
String s = String.valueOf(result);
return s;
使用BigInteger
import java.math.BigInteger;
// ...
BigInteger result = BigInteger.ZERO;
// ...
BigInteger myNum = new BigInteger(myStr);
result = myNum.max(result);
// ...
return result.toString();
uj5u.com熱心網友回復:
號碼太長了很長。多頭從 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,808。
嘗試這樣做:
public static String removeDigit(String number, char digit) {
double temp = 0;
String result="";
for(int i = 0; i<number.length(); i ) {
char num = number.charAt(i);
if(num == digit) {
String myStr = number.substring(0, i) number.substring(i 1);
try{
double myNum = Double.parseDouble(myStr);
if(myNum > temp) {
temp = myNum;
result=myStr;
}
}
catch (NumberFormatException ex){
ex.printStackTrace();
}
}
}
return result;
}
uj5u.com熱心網友回復:
您得到的問題是您超出了int和 的限制long。讓我們看看一些數字存盤型別的限制,然后使用最好的一種:
| 型別 | 尺寸 | 價值 | 超過 |
|---|---|---|---|
| 整數 | 32 位 | -2,147,483,648 至 2,147,483,647 | 是的 |
| 長 | 64 位 | -9,223,372,036,854,775,808 至 9,223,372,036,854,775,807 | 是的 |
| 漂浮 | 32 位 | 3.40282347 x 1038 至 1.40239846 x 10-45 | 是的 |
| 雙倍的 | 64 位 | 1.7976931348623157 x 10308 至 4.9406564584124654 x 10-324 | 是的 |
| 大整數 | 32 位 | 2^640億 | 不 |
在這里,我們發現這BigInteger是我們需要使用的類。因此,不要使用longor int,而是使用BigInteger. 要了解有關 BigInteger 的更多資訊,請訪問此處。
還要知道如何使用大整數,請參閱此處的答案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/469987.html
