Inicializando um ARRAY de inteiros

1 resposta Resolvido
java
R

Senhoras/Senhores, boa noite.
A situação do momento é a seguinte: Tenho uma classe “Gabaritos” que possui um array de inteiros “resultados[]” de tamanho “numGabaritos”.
Meu problema está acontecendo ao tentar passar um tamanho para a váriavel “numGabaritos”, que por sua vez, diz o tamanho do array.

Já tentei usar um construtor:

public Gabaritos(int numGabaritos){
	this.numGabaritos = numGabaritos;
}

também já tentei passar esse valor por um método set:

public void setNumGabaritos(){
	this.numGabaritos = numGabaritos;
}

Acredito que o que esteja acontecendo é o seguinte: o array está sendo inicializado com tamanho [0], se for realmente isso, por que isso acontece? Ele não deveria ser modificado ao chamar o construtor? Qual uma maneira eficaz de se fazer esse tipo de declaração de array?
Obs: Quando eu defino um valor para numGabaritos no corpo da classe, ele cria o array com o tamanho especificado sem problema algum, ex:

private int numGabaritos = 2;

Código completo:

public class Gabaritos {

protected static final char[] GABARITO = new char[]{'A', 'B', 'A', 'C', 'D', 'B', 'A', 'A', 'E', 'B'};
private int numGabaritos = 2;
public int resultados[] = new int [numGabaritos];
//k irá manter atualizado o indice de resultados. resultados[k]
private int k =0;

public Gabaritos(int numGabaritos){
	this.numGabaritos = numGabaritos;
}

public void comparaGabarito(char[] gabaritoAluno){
	int acertos =0;
	for(int i=0; i<GABARITO.length; i++){
		if(GABARITO[i] == gabaritoAluno[i])
			acertos++;
	}
	resultados[k] = acertos;
	k++;
}

public void printResultados(){
	for(int i=0; i<resultados.length; i++)
		System.out.println(resultados[i]);
}

}

Classe de teste, contendo o método main:

public class Teste{
public static void main(String[] args){
	
	Scanner input = new Scanner(System.in);
	int numGabaritos;
	
	System.out.println("Entre com a quantidade de gabaritos que serao corrigidos.");
	numGabaritos = input.nextInt();
	Gabaritos g1 = new Gabaritos(numGabaritos);
	char gabaritoAluno[] = new char[10];
	
	//laco for para pegar a resposta das questoes
	for(int i=0; i<numGabaritos; i++){
		System.out.println("Entre com as 10 respostas(caracteres A/B/C/D/E separados por um espaco:");
		for(int j=0; j<gabaritoAluno.length; j++)
			gabaritoAluno[j] = input.next().charAt(0);
		g1.comparaGabarito(gabaritoAluno);
	}
	System.out.println("\n");
	g1.printResultados();
}

1 Resposta

D
Solucao aceita

Em nenhum momento ele está sendo instanciado com tamanho zero.

Mais ou menos, um array possui um tamanho estático e não pode ser alterado. Então primeiro crie a variável com valor null e no construtor modifique a variável com novo valor new int [numGabaritos].

protected static final char[] GABARITO = new char[]{'A', 'B', 'A', 'C', 'D', 'B', 'A', 'A', 'E', 'B'};
private int numGabaritos = -1; // ou private int numGabaritos;
public int resultados[] = null; // ou public int resultados[];
//k irá manter atualizado o indice de resultados. resultados[k]
private int k =0;

public Gabaritos(int numGabaritos){
        this.numGabaritos = numGabaritos;
        resultados = new int [numGabaritos];
}
Criado 22 de julho de 2016
Ultima resposta 22 de jul. de 2016
Respostas 1
Participantes 2