Как проверить, является ли символ верхним / нижним регистром? - PullRequest
2 голосов
/ 04 апреля 2020

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

Пример:

Ввод abcde должен возвращать 15. input abCde должен вернуть 12.

Любая помощь приветствуется.

static int strScore(String str[], String s, int n) { 
    int score = 0, index=0; 

    for (int i = 0; i < n; i++) { 
        if (str[i] == s) { 

        for (int j = 0; j < s.length(); j++) 
            score += s.charAt(j) - 'a' + 1; 
            index = i + 1; 
            break; 
        } 
    } 

    score = score * index; 
    return score; 
} 

public static void main(String[] args) {        
    String str[] = { "abcde" };
    String s = "abcde"; 

    int n = str.length; 
    int score = strScore(str, s, n); 
    System.out.println( score); 
}

Ответы [ 3 ]

3 голосов
/ 04 апреля 2020

Используйте Character.isLowerCase(...).

Так вот как должен выглядеть ваш strScore метод:

static int strScore(String str[], String s, int n) { 
    int score = 0, index = 0; 
    for (int i = 0; i < n; i++) { 
        if (str[i].equals(s)) { 
            for (int j = 0; j < s.length(); j++) {
                char c = s.charAt(j);
                if(Character.isLowerCase(c)) // <-- This is the important part
                    score += c - 'a' + 1;
            }
            index = i + 1; 
            break; 
        } 
    }

    score = score * index; 
    return score; 
}

Как указано в комментариях, нет необходимости в str и, следовательно, ни параметр n. Это лучшая версия:

static int strScore(String s) { 
    int score = 0;

    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if(Character.isLowerCase(c))
            score += c - 'a' + 1;
    }

    return score; 
}
2 голосов
/ 04 апреля 2020

Есть две вещи для адреса:

  1. Вы использовали == для сравнения строк. Вам нужно использовать .equals
  2. Вы должны поставить чек, как if(s.charAt(j)>= 'a' && s.charAt(j)<'z')
for (int i = 0; i < n; i++) { 
    if (str[i].equals(s)) { 
        for (int j = 0; j < s.length(); j++) 
            if(s.charAt(j)>= 'a' && s.charAt(j)<'z') {
                score += s.charAt(j) - 'a' + 1; 

1 голос
/ 04 апреля 2020

Вы можете избежать передачи String str[] = { "abcde" };, который имеет один элемент, равный s методу. Вы также можете избежать передачи n, что просто str.length():

static int strScore(String s) {
    int score = 0, index = 0;
    for (int i = 0; i < s.length(); i++) {
        for (char c : s.toCharArray()) { 
            if(c >= 'a' && c <'z') {     //alternatively if(Character.isLowerCase(c))
                score += c - 'a' + 1;
            }
        }
        index = i + 1;
        break;
    }
    score = score * index;
    return score;
}
...