Programa acusa IndexOutOfBoundException na execução do método Char()

public class CharToInt {
	static int i=0;
	static int j=0;
	
	public int Char(String a) {
		String letra[]= {"a","b","c","d","e","f","g","h"};
		while(a!=letra[i]) {
			i++;
		}
		return i;
	}
	public int Int(String a) {
		String num[]= {"1","2","3","4","5","6","7","8"};
		while(a!=num[j]) {
			j++;
		}
		return j;
	}

Eu tento chamar o método Char() na classe principal. Quando eu coloco uma string funciona, mas quando eu coloco uma variável do tipo String, da erro ArrayIndexOutOfBoundsException

Primeiro problema: String não é um tipo primitivo, então se você usar os operadores == ou != você estará comparando a referência (o endereço de memória) e não o conteúdo.
Para comparar se um objeto String é igual ao outro, você tem que utilizar o método equals.

Segundo problema: Se for informado um valor que não está no array, vai acontecer um ArrayIndexOutOfBounds exception pois você sempre incrementa os contadores i e j.
Você só deve percorrer o array tantos elementos quantos ele possuir.

public class CharToInt {

    public int charactere(String a) {
        String[] letras = { "a", "b", "c", "d", "e", "f", "g", "h" };
        for (int i = 0; i < letras.length; i++) {
            if (a.equals(letras[i])) {
                return i; // encontrou uma letra igual à que foi informada, então retorna a posição dela
            }
        }
        return -1; // -1 indica que não encontrou a letra
    }
    public int inteiro(String a) {
        String[] numeros = { "1", "2", "3", "4", "5", "6", "7", "8" };
        for (int i = 0; i < numeros.length; i++) {
            if (a.equals(numeros[i])) {
                return i; // encontrou um numero igual à que foi informado, então retorna a posição dele
            }
        }
        return -1; // -1 indica que não encontrou o numero
    }
}
2 curtidas