#java
Вопрос:
Программа запущена, но когда я ввожу 9-значную ошибку, начинающуюся с 0, она выдает мне ошибку, которая недопустима, но я хочу напечатать ее как неиспользуемый символ. Его базовое обучение java, спасибо за помощь заранее. Весь мой код работает идеально, и если я введу 9 цифр, начиная с 8, то он будет работать правильно для 0, что приведет меня к ошибке.
import java.util.Scanner;
public class FirstDigitSIN
{
public static void main(String[] args)
{
Scanner kb = new Scanner(System.in);
System.out.print("Enter a SIN number :" );
if(kb.hasNextInt()){
// code that you want executed if the input is an integer goes in here
int num = kb.nextInt();
int numCopy = num;
int digit =0;
int count = 0;
while(num != 0 ){
num = num/10;
count ;}
if(count != 9){
System.out.println("Invalid Entry"); }
else{
System.out.println( num );
while(numCopy>0){
digit = numCopy ;
numCopy = numCopy/10;
}if (digit == 1){
System.out.println(" Registered in Atlantic Canada ");
}else if(digit == 2){
System.out.println(" Registered in Quebec ") ;
}else if (digit == 3){
System.out.println(" Registered in Quebec ");}
else if (digit == 4){
System.out.println(" Registered in Ontario ");}
else if (digit == 5){
System.out.println(" Registered in Ontario ");}
else if (digit == 6){
System.out.println(" Registered in Prairie Provinces, NWT, Nunavut, Northwest Ontario ");}
else if (digit == 7){
System.out.println(" Registered in Pacific region ");}
else if (digit == 9){
System.out.println(" A temporary SIN ");}
else if (digit ==8 amp;amp; digit ==0) {
System.out.println( "Not used");
}}
System.out.println(" *** End of program *** ");
}
else
{
System.out.println ("Error message goes here. Here you can tell them that you want them to enter an integer and not a string.");
}
}
}
Комментарии:
1. Что вы вводите 9 или 09?
2. Я пытаюсь ввести 9 цифр, начинающихся с 0. для ex — 012312312
3. Если ввести число, начинающееся с 0, и удерживать его внутри типа int, то начальное значение 0 будет усечено. Вот почему он рассматривает его как 8-значное число. Потому что 012312312 = 12312312
4. Каким может быть решение для этого и какие изменения я могу внести? Спасибо!
5. Вот как вы можете проверить, какой первый символ строки является String.valueOf(математическое.abs((длинное)число)).charAt(0) != ‘0’
Ответ №1:
Ваша проблема в том, что Java обрабатывает ваше целое число как 8 целых чисел. Это приводит к тому, что он не является допустимым вводом.
Я сделал оператор if, чтобы проверить, обрабатывается ли он длиной 8 символов, и если его длина 8, а первый символ равен 0, он не используется, так как телефонные номера не начинаются с 0.
if(count != 9 amp;amp; (String.valueOf(Math.abs((long)num)).charAt(0) == '0')){
System.out.println( "Not used");
}
Полный Код
import java.util.Scanner;
public class FirstDigitSIN
{
public static void main(String[] args)
{
Scanner kb = new Scanner(System.in);
System.out.print("Enter a SIN number :" );
if(kb.hasNextInt()){
// code that you want executed if the input is an integer goes in here
int num = kb.nextInt();
int numCopy = num;
int digit =0;
int count = 0;
while(num != 0 ){
num = num/10;
count ;}
if(count != 9 amp;amp; (String.valueOf(Math.abs((long)num)).charAt(0) == '0')){
System.out.println( "Not used");
}
else if(count != 9){
System.out.println("Invalid Entry"); }
else{
System.out.println( num );
while(numCopy>0){
digit = numCopy ;
numCopy = numCopy/10;
}if (digit == 1){
System.out.println(" Registered in Atlantic Canada ");
}else if(digit == 2){
System.out.println(" Registered in Quebec ") ;
}else if (digit == 3){
System.out.println(" Registered in Quebec ");}
else if (digit == 4){
System.out.println(" Registered in Ontario ");}
else if (digit == 5){
System.out.println(" Registered in Ontario ");}
else if (digit == 6){
System.out.println(" Registered in Prairie Provinces, NWT, Nunavut, Northwest Ontario ");}
else if (digit == 7){
System.out.println(" Registered in Pacific region ");}
else if (digit == 9){
System.out.println(" A temporary SIN ");}
else if (digit ==8 amp;amp; digit ==0) {
System.out.println( "Not used");
}}
System.out.println(" *** End of program *** ");
}
else
{
System.out.println ("Error message goes here. Here you can tell them that you want them to enter an integer and not a string.");
}
}
}
Ответ №2:
Пара вещей:
- Чтобы не пропустить эти начальные 0, используйте строку вместо int для удержания ввода.
- Затем используйте шаблон регулярного выражения, чтобы проверить, что строка содержит только числа (иначе произойдет ошибка, если не число).
- Как и в вашем коде, вы хотите проверить значение первой цифры в числе, введенном пользователем, чтобы получить первый индекс из введенного
String
. - Последнее условие
digit == 8 amp;amp; digit == 0
следует заменитьdigit == 8 || digit == 0
, так как здесь мы проверяем равенство одного значения. И одно значение не может быть равно как 8, так и 0.
Вот код:
public class FirstDigitSIN {
private static final String NUMBERS = "[0-9] ";
// Compile the ReGex
private static final Pattern NUMBER_PATTERN = Pattern.compile(NUMBERS);
public static void main(String[] args) throws JsonMappingException, JsonProcessingException {
Scanner kb = new Scanner(System.in);
System.out.print("Enter a SIN number :");
if (kb.hasNext()) {
// code that you want executed if the input is an integer goes in here
String num = kb.next();
// using Pattern.matcher()
Matcher m = NUMBER_PATTERN.matcher(num);
// Return if the string
// matched the ReGex
if (m.matches()) {
int numCopy = Integer.valueOf(num);
int digit = 0;
if (num.length() != 9) {
System.out.println("Invalid Entry");
} else {
System.out.println(num);
int digit = Character.getNumericValue(num.charAt(0));
System.out.println(digit);
if (digit == 1) {
System.out.println(" Registered in Atlantic Canada ");
} else if (digit == 2) {
System.out.println(" Registered in Quebec ");
} else if (digit == 3) {
System.out.println(" Registered in Quebec ");
} else if (digit == 4) {
System.out.println(" Registered in Ontario ");
} else if (digit == 5) {
System.out.println(" Registered in Ontario ");
} else if (digit == 6) {
System.out.println(" Registered in Prairie Provinces, NWT, Nunavut, Northwest Ontario ");
} else if (digit == 7) {
System.out.println(" Registered in Pacific region ");
} else if (digit == 9) {
System.out.println(" A temporary SIN ");
} else if (digit == 8 || digit == 0) {
System.out.println("Not used");
}
}
System.out.println(" *** End of program *** ");
} else {
System.out.println(
"Error message goes here. Here you can tell them that you want them to enter an integer and not a string.");
}
} else {
System.out.println(
"Error message goes here. Here you can tell them that you want them to enter an integer and not a string.");
}
}
}