ошибка при использовании верхнего регистра в проге палиндрома в java - PullRequest
3 голосов
/ 26 марта 2020
package Assignments;

import java.util.Scanner;

public class Assignment1 {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String str = sc.next();
    int i=0,j=str.length()-1,count=0;
    while(i!=j) {
        if(str.charAt(i)!=str.charAt(j)) {
            count++;
            break;
        }
        i++;
        j--;
    }
    if(count!=0) {
        System.out.println("Not a Palindrome");
    }
    else {
        System.out.println("Palindrome");
    }

}

}

При вводе заглавной буквы на входе отображается ошибка. «Асса» в качестве ввода работает нормально, но «Асса» показывает ошибку. Я знаю, что это небольшая ошибка, но я новичок в java. Кто-нибудь может помочь?

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
    at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
    at java.base/java.lang.String.charAt(String.java:709)
    at Assignments.Assignment1.main(Assignment1.java:12)

Ответы [ 3 ]

3 голосов
/ 26 марта 2020

a и A не являются одинаковыми символами. Если вас не волнует регистр, вы можете явно преобразовать все символы в нижний регистр (или в верхний регистр) при сравнении их:

while (i != j) {
    if (Character.toLowerCase(str.charAt(i)) != Character.toLowerCase(str.charAt(j))) {
        count++;
        break;
    }
    i++;
    j--;
}

РЕДАКТИРОВАТЬ: Обновленное исключение в вопросе проясняет проблему - оно не связано с расхождениями в верхнем / нижнем регистре, но с неправильной обработкой строк с четным числом символов. Для этого вы можете использовать оператор < вместо !=:

while (i < j) {
1 голос
/ 26 марта 2020

Заменить

if(str.charAt(i)!=str.charAt(j)) 

на

if(Character.toUpperCase(str.charAt(i))!=Character.toUpperCase(str.charAt(j))) 

Альтернативно,

Заменить

if(str.charAt(i)!=str.charAt(j)) 

на

if(Character.toLowerCase(str.charAt(i))!=Character.toLowerCase(str.charAt(j)))

Ключ заключается в сравнении символов в одном и том же регистре.

Кроме этого, вам также необходимо

заменить

while(i!=j)

на

while(i < j)

во избежание StringIndexOutOfBoundsException.

1 голос
/ 26 марта 2020

A и a не являются одним и тем же символом, поэтому обычно строка не совпадает.

Что вы можете сделать, перед обработкой строки, чтобы определить, является ли это палиндромом , вы конвертируете его в нижний регистр:

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