在这个程序中,我想检查输入的数字是否为10位整数移动数字,如果我输入值为0123456789,它的工作正常但是如果我输入像5028608722则失败。程序是正确的但这里有些东西丢失或错误。
打包游戏;
import java.util.Scanner;
class Utility
{
static boolean numberOrNot(String input)
{
try
{
int i=Integer.parseInt(input);
System.out.println(i);
}
catch(NumberFormatException ex)
{
return false;
}
return true;
}
}
public class CheckMobileNumber
{
public static void main(String[] args)
{
System.out.println("Enter your mobile number");
Scanner sc = new Scanner(System.in);
String input = sc.next();
if(Utility.numberOrNot(input) && (input.length() == 10))
{
System.out.println("Good!!! You have entered valid mobile number");
}
else
{
System.out.println("Sorry!!!! You have entered invalid mobile number. Try again...");
}
}
}
答案 0 :(得分:1)
尝试使用long
(长整数)数据类型而不是int
- 我认为你的空间不足:2 ^ 32 = 4,294,967,296。
以下是primitive data types的快速浏览。
答案 1 :(得分:1)
问题的直接原因是32位int类型不足以容纳所有10位整数。
您最好使用正则表达式执行此任务。从技术上讲,电话号码不是整数,在这种情况下它们看起来就像整数。最好不要将它们作为整数存储在软件中。有一天,您可能需要处理电话号码中的非数字字符。
Pattern phoneNumberPattern = Pattern.compile("\\d{10}");
if (phoneNumberPattern.matcher("5028608922").matches()) {
System.out.println("OK, phone number!");
} else {
System.out.println("Bad phone number!");
}
答案 2 :(得分:0)
您的大值(5028608722)无法适应已签名的int。 max signed int是2 ^ 31 - 1 == 2147483647.您使用的数字是5028608722,这个数字太大了。为了使代码正常工作,您需要更改为使用长类型。例如:
import java.util.Scanner;
class Utility
{
static boolean numberOrNot(String input)
{
try
{
long i=Long.parseLong(input);
System.out.println(i);
}
catch(NumberFormatException ex)
{
return false;
}
return true;
}
}
public class CheckMobileNumber
{
public static void main(String[] args)
{
System.out.println("Enter your mobile number");
Scanner sc = new Scanner(System.in);
String input = sc.next();
if(Utility.numberOrNot(input) && (input.length() == 10))
{
System.out.println("Good!!! You have entered valid mobile number");
}
else
{
System.out.println("Sorry!!!! You have entered invalid mobile number. Try again...");
}
}
}
使用Long.parseLong()
的可选解决方案是使用正则表达式来匹配您的号码。例如,像这样的正则表达式对于10位数字将返回true,否则为false:
"0123456789". match("[0-9]{10}")
将返回true。任何非数字值或任何非10位数字值都将返回false。
所以你的代码看起来像:
import java.util.Scanner;
class Utility
{
static boolean numberOrNot(String input)
{
return input.matches("[0-9]{10}");
}
}
public class CheckMobileNumber
{
public static void main(String[] args)
{
System.out.println("Enter your mobile number");
Scanner sc = new Scanner(System.in);
String input = sc.next();
if(Utility.numberOrNot(input))
{
System.out.println("Good!!! You have entered valid mobile number");
}
else
{
System.out.println("Sorry!!!! You have entered invalid mobile number. Try again...");
}
}
}
答案 3 :(得分:0)
除了正确的,简单的Java答案:我建议使用lib phonenumber作为电话号码。 github.com/googlei18n/libphonenumber如果您的兴趣不仅仅是学术性的; - )