Удостоверение личности чар - PullRequest
0 голосов
/ 20 марта 2020

Я застрял в своем коде. У меня есть все, что нужно для инициализации. Идентификатор сотрудника имеет длину 8 или более символов и состоит только из заглавных букв и цифр. Первые два символа должны быть заглавными буквами, а идентификатор должен содержать как минимум 2 цифры. Напишите метод, который принимает идентификатор сотрудника в виде массива символов и возвращает значение true, если идентификатор является действительным, и значение false в противном случае. У меня есть мой код, но он не будет увеличиваться, как только он находит первые два индекса, если они являются заглавными буквами

public static boolean isValidID(char [] id) {      

      if(id.length >= 8)
      {
        validLen = true;
      }
      else if(id.length < 8)
      {
         validLen = false;
      }

      for(int i = 0; i < id.length; i++)
      {  
            if(Character.isUpperCase(0))
            {
               check2Cap++;
            }
            else if(Character.isUpperCase(1))
            {
               check2Cap++;   
            }
            else if(Character.isDigit(i))
            {
               check2Digits++;
            }          

     }  
     if(check2Cap == 2)
     {
        checkCapital = true;
     }
     if(check2Digits >= 2)
     {
        checkDig = true;
     } 
     return validLen && checkCapital && checkDig;
}

Ответы [ 3 ]

0 голосов
/ 20 марта 2020

Во-первых, ваши вызовы Character.XXX () должны использовать id[i], а не i сам

Во-вторых, сначала вы должны проверить свои начальные заглавные буквы

  if (id[0] < 'A' || id[0] > 'Z') return false;
  if (id[1] < 'A' || id[1] > 'Z') return false;
  for(int i = 2; i < id.length; i++)
  {
        //The code below is now unnecessary
        if(Character.isUpperCase(0))
        {
           check2Cap++;
        }
        else if(Character.isUpperCase(1))
        {
           check2Cap++;   
        }
        //end unnecessary
        else if(Character.isDigit(id[i]))
        {
           check2Digits++;
        }          

 }
0 голосов
/ 20 марта 2020

Переместите проверку верхнего регистра за пределы l oop.

Character.isDi git (i) -> Неправильная проверка. Вы должны проверить по символам, а не по индексу.


Примерно так должно работать

  public static boolean isValidID(char [] id) {      

  boolean validStruct = (id.length >= 8) && (Character.isUpperCase(id[0]) && (Character.isUpperCase(id[1]))) ; 
  int numDigits =0 ;

  for(int i = 0; validStruct && i < id.length ; i++)
  {  
     if(Character.isDigit(id[i]))
         numDigits+=1; 
  }  
 return validStruct && (numDigits >= 2);

}


 public static void main(String [] args) throws InterruptedException
    {
     System.out.println(isValidID("FRUMT3UMPO".toCharArray()));
     System.out.println(isValidID("GE7IMTWIK5".toCharArray()));
    }  

Вывод -

false
true
0 голосов
/ 20 марта 2020

Это должно работать. Использует кодовые точки, что приятно. Это немного расточительно с двухпотоковым представлением символов в виде значений кодовой точки, но это элегантно, что приятно. Определенно не самый производительный кусок кода.

    private static boolean valid(char[] id, int minimumLength, int minimumDigits, int minimumUppercase, int firstNLetter) {
        if (id.length < minimumLength) {
            return false;
        }
        String idAsString = new String(id);

        if (!idAsString.codePoints().limit(firstNLetter).allMatch(Character::isLetter)) {
            return false;
        }

        if (idAsString.codePoints().filter(Character::isDigit).count() < minimumDigits) {
            return false;
        }

        return idAsString.codePoints().filter(Character::isUpperCase).count() >= minimumUppercase;
    }
boolean first = valid("GE7IMTWIK5".toCharArray(), 8, 2, 2, 2);

boolean second = valid("FRUMT3UMPO".toCharArray(), 8, 2, 2, 2);

System.out.println(String.format("first=%s, second=%s", first, second));
first=true, second=false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...