Как определить, содержит ли число, введенное пользователем, правильное количество цифр и знаков - PullRequest
0 голосов
/ 13 октября 2018

Я новичок в программировании на Java, и в настоящее время мы изучаем строки и символы.Моё лабораторное задание состоит в том, чтобы пользователь вводил свой SSN, а программа определяла, является ли он действительным.Введенный формат должен быть 123-45-6789.Пока что это то, что я сделал: пакет Labs;

import java.util.Scanner;

public class Lab4 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("Enter a valid SSN");

        String ssn = input.nextLine();

        System.out.print(ssn);
        if (ssn.length() == 11) {
            if 


        }

    }
}

Я искал на форумах здесь и нашел несколько разных ответов, но, пробуя их в моем коде, что-то идет не так.Я не ищу никого, чтобы написать это для меня.Какой тип методов я бы использовал, чтобы проверить, что символы 0-2, 4-5, 7-10 содержат число, а символы 3 и 6 содержат -.Очевидно, charAt и contains были бы полезны, но я не уверен, как выписать условия, чтобы определить это.

И этот вопрос задали Как определить, находится ли SSN вПравильный формат , который выглядит точно таким же заданием, я предполагаю, что мы используем одну и ту же книгу, на самом деле не дает ответа, хотя она помечена как дубликат, который я не могу найти в исходном вопросе.Мы еще не изучили массивы, поэтому я ищу более простой ответ, хотя я уверен, что пример использования массивов не повредит в дополнение к более простому ответу, так что я смогу развить свои навыки больше.

Редактировать обновление: хотя я уверен, что есть лучший способ сделать это, он работает.

public static void main (String [] args) {

    Scanner input = new Scanner(System.in);

    System.out.println("Enter a valid SSN");

    String ssn = input.nextLine();


    if (ssn.length() == 11 && 
            ssn.charAt(0)>='0' && ssn.charAt(0)<='9' && 
            ssn.charAt(1)>='0' && ssn.charAt(1)<='9' && 
            ssn.charAt(2)>='0'  && ssn.charAt(2)<='9' &&
            ssn.charAt(4)>='0'  && ssn.charAt(4)<='9' &&
            ssn.charAt(5)>='0'  && ssn.charAt(5)<='9' &&
            ssn.charAt(7)>='0'  && ssn.charAt(7)<='9' &&
            ssn.charAt(8)>='0'  && ssn.charAt(8)<='9' &&
            ssn.charAt(9)>='0'  && ssn.charAt(9)<='9' &&
            ssn.charAt(10)>='0'  && ssn.charAt(10)<='9' &&
            ssn.charAt(3)=='-' && ssn.charAt(6)=='-') 
            {
        System.out.println(ssn + " is a valid social security number");
    }
        else
            System.out.print(ssn + " is not a valid social security number");

    input.close();



}

}

1 Ответ

0 голосов
/ 13 октября 2018

Прежде всего, я бы избегал вложенных ifs, например:

if (foo==bar) {
     if(that!=other) {
         if(...)
     }
}

Это может быстро привести к хаосу.Попробуйте сделать ваши операторы if параллельными, а не вложенными.Например:

if (ssn.length() != 11) {
    System.out.print("SSN must be 11 letters long");
    return;
}

if (ssn.charAt(3)!='-' || ssn.charAt(7)!='-') {
    System.out.print("SSN must be 11 letters long");
    return;
}

Во-вторых, вам нужно проверить, является ли символ цифрой.Вы можете сделать это с помощью простого числового сравнения:

if (ssl.charAt(0)<'0' || ssl.charAt(0)>'9') {
    System.out.print("Char at 0 was not a digit");
    return;
}

Хорошей практикой было бы также извлечь повторяющуюся часть (например, указанную выше проверку цифрой) в отдельном методе.Таким образом, вы избегаете повторения и получаете намного больший контроль над своей программой.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...