Im试图将字符串转换为整数,如下所示:
import java.util.Scanner;
import java.lang.*;
public class Assignment4
{
public static void main(String[] args)
{
// introduce program
System.out.println("\n========================");
System.out.println("Card Number Verification");
System.out.println("========================\n");
System.out.println("Enter 16 digit card number (no spaces): ");
Scanner sc = new Scanner(System.in); // initialize scanner
// intialize any relevant variables
int sum = 0; // sum for all digits in card number
int new_card_number; // relevant variable
String card_string = sc.nextLine(); //get users card number
int length = card_string.length(); // get length of number
// verify that it is 16 numeric characters
if (length != 16 || card_string.matches("\\d+") == false)
{
System.out.println("Restart the program and enter a valid card number.");
System.exit(0);
}
int card_number = Integer.parseInt(card_string.trim());
new_card_number = card_number; // ensures card_number doesnt change
while (length > 0)
{
sum = sum + (new_card_number % 10);
new_card_number = (new_card_number - (new_card_number % 10)) / 10;
length--;
System.out.println(new_card_number + sum);
}
}
}以下是我所犯的错误:
========================
Card Number Verification
========================
Enter 16 digit card number (no spaces):
1234123412341234
Exception in thread "main" java.lang.NumberFormatException: For input string: "1234123412341234"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:461)
at java.lang.Integer.parseInt(Integer.java:499)
at Assignment4.main(Assignment4.java:28)我尝试过使用trim选项,或者只是将字符串变量直接输入为'Integer.parseInt(card_string)‘。为什么我还会收到这个错误?
发布于 2016-03-18 21:27:41
积分类型的值是以下范围内的整数: ..。
您在这里超过了int值的限制
Integer.parseInt(card_string.trim());一个很好的解决方案是在处理非常大的数字时使用BigInteger。
BigInteger myBigNumber = new BigInteger(card_string.trim());许多操作可以作为sum,multiply等.
来源:https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html
另一个解决方案是使用long而不是int。它是有限的,但限制是相当高的,请看下面。
积分类型的值是以下范围内的整数: ..。 很长时间,从-9223372036854775808到9223372036854775807,包括
发布于 2016-03-18 21:21:22
int最大尺寸为2,147,483,647。你试图解析更大的数字,123412341,234。
您可以使用long而不是int
long card_number = Long.parseLong(card_string.trim());发布于 2016-03-18 21:27:10
正如其他人所注意到的,您将得到此异常,因为卡号比int所表示的要大。
你看起来只是简单地把卡号的数字相加,显然是相反的(尽管只有当你在求和的时候打印一些东西时,这才是相关的)。
不需要将整个字符串解析为数字即可:
int sum = 0;
for (int i = card_number.length() - 1; i >= 0; --i) {
sum += Character.getNumericValue(card_number.charAt(i));
System.out.println(card_number.substring(0, i) + sum);
}(请注意,trim是不必要的,因为您已经检查过它只是数字)
没有println,您可以更容易地(/naturally)做:
int sum = 0;
for (int i = 0; i < card_number.length(); ++i) {
sum += Character.getNumericValue(card_number.charAt(i));
}https://stackoverflow.com/questions/36094337
复制相似问题