Программа запущена, но когда я ввожу 9-значную ошибку, начинающуюся с 0, она выдает мне ошибку, которая недопустима, но я хочу напечатать ее как неиспользуемый символ

#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.");
        }
      }
}