我正在尝试将字符串转换为整数,如下所示:
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选项或者直接输入字符串变量为“我nteger.parseInt(card_string)”。为什么我仍然收到这个错误?
正如其他人所指出的,您会遇到这种异常情况,因为卡号比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
,您可以更轻松地(自然地)执行以下操作:
int sum = 0;
for (int i = 0; i < card_number.length(); ++i) {
sum += Character.getNumericValue(card_number.charAt(i));
}
int
最大尺寸为2147483647。您正在尝试解析更大的数字12341234112341234。
可以使用long
代替int
long card_number = Long.parseLong(card_string.trim());
整数类型的值是以下范围内的整数:
[...]
你超出了这里的int
值限制
Integer.parseInt(card_string.trim());
一个很好的解决方案是在处理非常大的数字时使用biginger
。
BigInteger myBigNumber = new BigInteger(card_string.trim());
许多操作都是可能的,如求和,乘法
,等等。。。
资料来源:BigInteger JavaDoc
另一个解决方案是使用long
而不是int
。它是有限的,但限制相当高,请查看下面。
整数类型的值是以下范围内的整数:
[...]
从-9223372036854775808到9223372036854775807包容
问题内容: 如何在JavaScript中将字符串转换为整数? 问题答案: 最简单的方法是使用本机函数: 如果这对您不起作用,则有 parseInt , 一元加号 , 带有floor的parseFloat 和 Math.round 方法。 parseInt: 一元加号,如果您的字符串已经是整数形式: 如果您的字符串是浮点数或可能是浮点数,并且您想要一个整数: 或者,如果您要多次使用Math.floo
问题内容: 有什么方法可以将null转换为Integer。null实际上是一个字符串,我在我的服务层中传递该字符串,将其接受为整数。因此,每当我尝试将null字符串强制转换为Integer时,都会引发异常。但是我必须将null转换为Integer。 问题答案: 您 不能 从String强制转换为Integer。但是,如果您尝试将字符串转换为整数,并且必须提供处理字符串的实现,请查看以下代码片段:
问题内容: 给定一个数字: 将其转换为字符串的“最佳”方法是: 问题答案: 有多种方法: (我的偏爱) (我不知道编译器如何处理它,也许它和上面一样有效)
问题内容: 我有一个整数 在声明中,我必须将其与一些字符串进行比较。我不能在开始时设置为字符串,因为必须在循环中将其递减。 如何转换? 问题答案: 我找到了答案。 将整数转换为字符串: 将字串转换为整数:
问题内容: 有没有人能将不安全的字符串转换为? 该字符串通常回来为:或类似的东西。 在这种情况下,我要。如果我想。我从不希望该方法失败,但是我不愿意尝试,除非通过它只是为了隐藏错误(以防万一发生极端情况)。 问题答案: 在这种情况下,您确实有一种避免/的方法,尽管我不建议这样做(假设您的输入字符串名为,并且您处于必须返回某些内容的函数中): 将在部分就是你回什么是你想要比如说,如果是,空,全空间,
问题内容: 我正在尝试从EditText字段中将两个数字加在一起。到目前为止,我有下面的代码,我相信它会将EditText字段“ pos1_deg”和“ pos2_deg”转换为整数deg1和deg2。 然后,我可以执行以下操作将它们添加在一起 然后degSum寄存器保存deg1和2的和。 然后要输出回“结果” EditText,我需要将整数degSum更改为字符串。我认为正确的方法是使用以下代码