Problema ao atribuir outro valor em um Switch de char

2 respostas
S

Criei um programa aqui q recebe como parâmetro um char e de acordo com os cases, atribui outro valor a uma outra variável char, só que quando chamo esse método pra ele fazer essa atribuição, ele imprime sempre algo na saída como um [](um desenho parecido com isso). Nao sei pq, alguém ajuda?

public static void main(String[] args){

String t = "9wq";
char[] e = "t.toCharArray();
char[] s = new char[e.length];

			for(int i=0;i<e.length;i++){

				// Esse a é um objeto da própria classe
				a.valor(e[i], s[i]);
				
			}
			

// Aqui quando peço pra imprimir, ele imprime aquele caractere estranho que falei.
System.out.println(s[i]);
}

public void valor(char caracterOriginal, char caracterEquivalente){
		
		
		switch(caracterOriginal){
		
		case '1':
			caracterEquivalente = ' ';
			break;

		case '2':
			caracterEquivalente = 'a';
			break;
		
		case '3':
			caracterEquivalente = 'b';
			break;
		
		case '4':
			caracterEquivalente = 'c';
			break;
			
		case '5':
			caracterEquivalente = 'd';
			break;
		
		case '6':
			caracterEquivalente = 'e';
			break;

		case 'q':
			caracterEquivalente = 'f';
			break;
		
		case 'w':
			caracterEquivalente = 'g';
			break;

                default:
}
}

2 Respostas

V

Steam, não funciona porque você está fazendo uma passagem de parametros por valor, ou seja, você está passando o valor apontado no indice do vetor para o outro método, e no outro método atribuindo um novo valor para a variavel caracterEquivalente, mas não significa que o valor que você passou também será alterado.

O que você poderia fazer aí de imediato seria isso:

public static void main(String[] args) {
		Teste a = new Teste();
		String t = "9wq";
		char[] e = t.toCharArray();
		char[] s = new char[e.length];

		for (int i = 0; i < e.length; i++) {

			// Esse a é um objeto da própria classe
			try {
				s[i] = a.valor(e[i]);
			} catch (Exception e1) {
				e1.printStackTrace();
			}
			System.out.println(s[i]);

		}

	}

	public char valor(char caracterOriginal) throws Exception {

		switch (caracterOriginal) {

		case '1':
			return ' ';

		case '2':
			return 'a';

		case '3':
			return 'b';

		case '4':
			return 'c';

		case '5':
			return 'd';

		case '6':
			return 'e';

		case 'q':
			return 'f';

		case 'w':
			return 'g';

		default:
			throw new java.lang.NullPointerException("Caracter inválido");
		}
	}
J

Quando você passa um valor por parâmetro, o Java cria uma variável local no método, e como você não retorna nada, ele só usa essa variável localmente e depois exclui da memória. Tenta retornar um char nessa função, vai funcionar.

Criado 26 de maio de 2013
Ultima resposta 29 de mai. de 2013
Respostas 2
Participantes 3