Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eduardomonteiro

Classes não rodam!

Recommended Posts

Pessoal meus códigos são os seguintes:

import java.util.Scanner;

public class Principal extends Entrada{//inicio classe
	Scanner input = new Scanner(System.in);

public static void main (String args[]){

 	 double x;

   	x = Math.random();



	Saida umaSaida = new Saida();

	Entrada umaEntrada = new Entrada();

	Buffer_circular umBuffer_circular = new Buffer_circular();

	Metodos umMetodos = new Metodos();


	umaEntrada.tamanho_vetor_entrada();//Executa método que define tamanho do vetor de entrada
	umaEntrada.incrementa_entrada();//Executa método que preenche vetor de entrada
	umaSaida.tamanho_vetor_saida();//Executa método que define tamanho do vetor de saida
	umBuffer_circular.tamanho_vetor_buffer();//Executa método que define tamanho do vetor de buffer

	for(int i=0; i<100; i++) {


   if( x >= 0.0 && x <= 0.25) { //se valor rand entre 0 e 0,25, ativa métodoA

		umMetodos.metodoA();

	  } // fim if

	 else if ( x > 0.25 && x <= 0.5) { //se valor rand entre 0,25 e 0,50, ativa métodoB
	   
	  umMetodos.metodoB();
	  } // fim else if

	  else if ( x > 0.5 && x <= 0.75) { //se valor rand entre 0,50 e 0,75, ativa métodoC
		
	  umMetodos.metodoC();
	  } // fim else if

	 else if ( x > 0.75 && x <= 1.0) { 
	  
	 umMetodos.metodoD();


	  } // fim else if

	else {//senão faça
		
		System.exit(0);
	  } // fim else


}//Fim for i

}//Fim Static

}//Fim Classe

import java.util.Scanner;
public class Entrada {//inicio classe
	Scanner input = new Scanner(System.in);


	int entrada[];
	int valor=1;
	int tamanho_entrada=30;
	int valor_pego=0;
	int i=0;
	int contador_buffer=0;
	int retorno_tamanho_entrada=0;

	public int tamanho_vetor_entrada(){//Inicio Método que define tamanho do vetor como 30
				
		entrada = new int [tamanho_entrada];
		return tamanho_entrada;

		}//fecha Tamanho

	
	public void incrementa_entrada(){//Inicio incrementa_entrada


		for(int i=0; i<tamanho_entrada; i++){ //incrementa valores até o tamanho do vetor	
	

			entrada[i]=valor;
				valor= valor+1;

		}//Fim for i

	}//fim incrementa_entrada
	
	public void aux_metodoA(){//Inicio aux_metodoA
		
		this.contador_buffer=contador_buffer;
		valor_pego=0; 
		valor_pego= entrada[contador_buffer];
		
				

	}//Fim aux_metodoA

		public void aux_metodoB(){//Inicio aux_metodoB
		
		this.contador_buffer=contador_buffer;
		valor_pego=0; 
		valor_pego= entrada[contador_buffer];
		
				

	}//Fim aux_metodoB
	

		public void aux_metodoC(){//Inicio aux_metodoC
		
		this.contador_buffer=contador_buffer;
		valor_pego=0; 
		valor_pego= entrada[contador_buffer];
		
				

	}//Fim aux_metodoC
	
	public void imprime_vetor_entrada(){//Inicio vetor_entrada
		System.out.println("Entrada");
			for (i=0;i<30; i++){
				System.out.println(entrada[i]);
	}//fim for i
	

	}//Fim imprime vetor_entrada

	
	
}//Fim Classe

import java.util.Scanner;
public class Buffer_circular {//inicio classe
	Scanner input = new Scanner(System.in);


int buffer_int[];

char buffer_char[];


int tamanho_entrada_buffer_int=5;
char tamanho_entrada_buffer_char=5;


int contador_buffer=0;
int valor_pego_buffer=0;
char metodo_a='A';
char metodo_b='B';
char metodo_c='C';
int valor_pego;
int contador_antigo_buffer=0;
int valor_antigo_pego=0;
char valor_antigo_pego_char=' ';
int contador_metodoA=0;
int contador_metodoB=0;
int contador_metodoC=0;
int j=0;
int b=0;
int c=0;
int retornoa=0;
int retornob=0;
int retornoc=0;
int retornod=0;
int retorno_incr_a=0;
int retorno_incr_b=0;
int retorno_incr_c=0;
int retorno_tamanho=0;


Entrada outra2Entrada = new Entrada();

Saida outra2Saida = new Saida();



public int tamanho_vetor_buffer(){//Inicio Método que define tamanho dos vetores como 5
				
		buffer_int = new int [tamanho_entrada_buffer_int];
		buffer_char = new char [tamanho_entrada_buffer_char];
		
		return retorno_tamanho;
		}//fecha Tamanho

public int testa_buffer_cheio_ou_naoA(){//Inicio Método testa_bufferA
	

	if (contador_buffer==5)
		 System.exit(0);
	
			
	else 	
		
		outra2Entrada.aux_metodoA();

		this.valor_pego=valor_pego;
		buffer_int[contador_buffer]= valor_pego;
		buffer_char[contador_buffer]= metodo_a;
		contador_buffer=contador_buffer+1;
	return retornoa;
		
		
}//Fim método testa buffer


public int testa_buffer_cheio_ou_naoB(){//Inicio Método testa_bufferB
	

	if (contador_buffer==5)
		 System.exit(0);
	
			
	else 	
		
		outra2Entrada.aux_metodoB();

		this.valor_pego=valor_pego;
		buffer_int[contador_buffer]= valor_pego;
		buffer_char[contador_buffer]= metodo_b;
		contador_buffer=contador_buffer+1;
		
		return retornob;
}//Fim método testa bufferB


public int testa_buffer_cheio_ou_naoC(){//Inicio Método testa_bufferc
	

	if (contador_buffer==5)
		 System.exit(0);
	
			
	else 	
		
		outra2Saida.aux_metodoD();

		this.valor_pego=valor_pego;
		buffer_int[contador_buffer]= valor_pego;
		buffer_char[contador_buffer]= metodo_c;
		contador_buffer=contador_buffer+1;
		
		return retornoc;
}//Fim método testa bufferc


public int testa_buffer_cheio_ou_naoD(){//Inicio Método testa_bufferD
	

	if (contador_buffer==0)
		 System.exit(0);
	
			
	else 	
		
		outra2Saida.aux_metodoD();
		
		buffer_int[contador_antigo_buffer]= valor_antigo_pego;
		buffer_char[contador_antigo_buffer]= valor_antigo_pego_char;
		
		return retornod;
}//Fim método testa bufferD

public int incrementa_contadorA(){ //Inicio método que incrementa contador métodoA
	for (j=0; j<5; j++){//Inicio for j
			if (buffer_char[j]=='A')
				contador_metodoA=contador_metodoA+1;

	}//Fim for j

	System.out.println("Método A foi chamado:"+contador_metodoA);
		System.out.print("  Vezes");
	return retorno_incr_a;
}//Fim método que incrementa contador MétodoA

public int incrementa_contadorB(){ //Inicio método que incrementa contador métodoB
	for (b=0; b<5; b++){//Inicio for b
			if (buffer_char[b]=='B')
				contador_metodoB=contador_metodoB+1;

	}//Fim for j

	System.out.println("Método B foi chamado:"+contador_metodoB);
		System.out.print("  Vezes");
	return retorno_incr_b;
	
}//Fim método que incrementa contador MétodoB


public int incrementa_contadorC(){ //Inicio método que incrementa contador métodoc
	for (c=0; c<5; c++){//Inicio for c
			if (buffer_char[c]=='C')
				contador_metodoC=contador_metodoC+1;

	}//Fim for j

	System.out.println("Método C foi chamado:"+contador_metodoB);
		System.out.print("  Vezes");
	return retorno_incr_c;
}//Fim método que incrementa contador MétodoC

}//Fim classe

 

import java.util.Scanner;
public class Saida {//inicio classe
	Scanner input = new Scanner(System.in);

int saida_int[];

char saida_char[];

int contador_saida_int=0;


int tamanho_saida_int=30;
char tamanho_saida_char=30;
int valor_antigo_pego=0;
char valor_antigo_pego_char=' ';
int retorno1=0;
int retorno2=0;
int retorno3=0;
int retorno4=0;

	Entrada outraEntrada = new Entrada();

	Buffer_circular outroBuffer_circular = new Buffer_circular();


	public int tamanho_vetor_saida(){//Inicio Método que define tamanho do vetor como 30
				
		saida_int = new int [tamanho_saida_int];
		saida_char= new char[tamanho_saida_char];
		return retorno1;

		}//fecha Tamanho

	public int aux_metodoD(){//Inicio aux_metodoD

		this.valor_antigo_pego=valor_antigo_pego;
		this.valor_antigo_pego_char=valor_antigo_pego_char;

		saida_int[contador_saida_int]= valor_antigo_pego;
		saida_char[contador_saida_int]= valor_antigo_pego_char;		
		return retorno2;

	}//Fim aux_metodoC
	public int gera_atraso(){//Inicio método que gera atraso
	 try {
				Thread.sleep(1000);
	 		 } catch (Exception e) {
					e.printStackTrace();
				  } // fim catch
		return retorno3;
	}//fim método que gera atraso
	public int impressao(){//Inicio Método para Impressão
	
		outraEntrada.imprime_vetor_entrada();
		outroBuffer_circular.incrementa_contadorA();
		outroBuffer_circular.incrementa_contadorB();
		outroBuffer_circular.incrementa_contadorC();
		return retorno4;
	}//Fim método para impressão



}//Fim Classe

ao compilar obtenho o seguinte erro:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:39)

at java.nio.ByteBuffer.allocate(ByteBuffer.java:312)

at sun.nio.cs.StreamDecoder.<init>(StreamDecoder.java:231)

at sun.nio.cs.StreamDecoder.<init>(StreamDecoder.java:211)

at sun.nio.cs.StreamDecoder.forInputStreamReader(StreamDecoder.java:50)

at java.io.InputStreamReader.<init>(InputStreamReader.java:57)

at java.util.Scanner.<init>(Scanner.java:590)

at Saida.<init>(Saida.java:3)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

at Buffer_circular.<init>(Buffer_circular.java:42)

at Saida.<init>(Saida.java:22)

Alguem tem ideia do pode estar acontecendo?]

 

Desde já agradeço a todo!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

 

você está sem espaço no heap. Provavelmente saiu alocando um monte de coisa dinamicamente.

Como não entendendo qual é a do gc, desreferencie ou aumente o tamanho do heap (acho que era -XmxQTDEm)

Outra coisa que ajuda é usar o debugger de uma IDE. Não lembro se o Eclipse tinha um plugin de profiler p/ acompanhar o uso de memória ou se ja vinha embutido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então eu to venu uma coisa aki...num sei se é issu, so novo ainda em programação, e num intendo muito...

mas a classe saida ta puxanu o buffer_circular que po sua vez puxa a classe saida, e vai inu assim

ve se é issu....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, já agradeço pela ajuda..

alterei algumas coisas... mas ainda não roda:

import java.util.Scanner;

public class Principal extends Entrada{//inicio classe
	Scanner input = new Scanner(System.in);

public static void main (String args[]){

 	 double x;
	
		
   	


	
	Saida umaSaida = new Saida();

	Entrada umaEntrada = new Entrada();

	Buffer_circular umBuffer_circular = new Buffer_circular();

	Impressao umaImpressao = new Impressao();
	
	umaEntrada.tamanho_vetor_entrada();//Executa método que define tamanho do vetor de entrada
	umaEntrada.incrementa_entrada();//Executa método que preenche vetor de entrada
	umaSaida.tamanho_vetor_saida();//Executa método que define tamanho do vetor de saida
	umBuffer_circular.tamanho_vetor_buffer();//Executa método que define tamanho do vetor de buffer


	x = Math.random();

	for(int j=0; j<5; j++) {

		
		   if( x >= 0.0 && x <= 0.25) { //se valor rand entre 0 e 0,25, ativa métodoA
			System.out.println("Executando primeiro if");
	   			 umBuffer_circular.testa_buffer_cheio_ou_naoA(valor_pego);

				  } // fim if

				 else if ( x > 0.25 && x <= 0.5) { //se valor rand entre 0,25 e 0,50, ativa métodoB
	   			System.out.println("Executando segundo if");
			  umBuffer_circular.testa_buffer_cheio_ou_naoB(valor_pego2);
				  } // fim else if

				  else if ( x > 0.5 && x <= 0.75) { //se valor rand entre 0,50 e 0,75, ativa métodoC
					System.out.println("Executando terceiro if");
			   umBuffer_circular.testa_buffer_cheio_ou_naoC(valor_pego3);
	 			 } // fim else if

			 else if ( x > 0.75 && x <= 1.0) { 
					  System.out.println("Executando quarto if");
			  umBuffer_circular.testa_buffer_cheio_ou_naoD();


	 			 } // fim else if

			else {//senão faça
				 System.exit(0);
				  } // fim else


	}//Fim for j

	umaImpressao.gera_atraso();//Executa método que gera atraso de 1s
	umaImpressao.impressao();//Executa métod que imprime estados das filas na tela

}//Fim Static

}//Fim Classe
import java.util.Scanner;
public class Entrada  {//inicio classe
	Scanner input = new Scanner(System.in);


	public int entrada[];//declara vetor
	int valor=1;//valor se inicia com 1, este valor irá preencher o vetor
	public int tamanho_entrada=30;//30 é o tamanho do vetor
	
	static int valor_pego=0;//variável para passagem de valores
	static int valor_pego2=0;//variável para passagem de valores
	static int valor_pego3=0;//variável para passagem de valores
	
	int i=0;//Variável usada pelo for
	int a=0;//Variável usada para pegar valores de determinada posição
	int retorno_imprime=0;//Variável para retorno

	int contador_passagem_inteiro=0;
	

	public void tamanho_vetor_entrada(){//Inicio Método que define tamanho do vetor como 30
				
		entrada = new int [tamanho_entrada];//define tamanho com o valor contido na variável tamanho_entrada
		

		}//fecha método Tamanho

	
		public void incrementa_entrada(){//Inicio método que incrementa_entrada


		for(int i=0; i<tamanho_entrada; i++){ //incrementa valores até o tamanho do vetor	
	

				entrada[i]=valor;//Adiciona valor a posição do vetor
				valor= valor+1;//Incrementa variável valor, para que o vetor seja preenchido em oredem crescente

		}//Fim for i

		}//fim incrementa_entrada
	
	
	
	public int imprime_vetor_entrada(){//Inicio vetor_entrada
		System.out.println("Entrada");
			for (i=0;i<30; i++){//para i< tamanho do vetor
				System.out.println(entrada[i]);//imprime posição do vetor entrada
		
		}//fim for i
	return retorno_imprime;
	}//Fim imprime vetor_entrada

	public int passagem_valor_inteiro(int valor_pego){//Inicio Método para passagem de valores
	
	if (a<=30){//Inicio If

	valor_pego= entrada[a];//pega valor da posição no vetor entrada	
	a=a+1;
	}//Fim if
	else if(a==31){//Inicio Else if

		}//fim else if

	return valor_pego;
	}//Fim método para Passagem de valores
	

	public int passagem_valor_inteiro2(int valor_pego2){//Inicio Método para passagem de valores

	
	if (a<=30){//Inicio If

		valor_pego2= entrada[a];//pega valor da posição no vetor entrada	
		a=a+1;
	}//Fim if
	else if(a==31){//Inicio Else if

		}//fim else if
	
	return valor_pego2;
	}//Fim método para Passagem de valores


	public int passagem_valor_inteiro3(int valor_pego3){//Inicio Método para passagem de valores
		
		if (a<=30){//Inicio If
		valor_pego3= entrada[i];//pega valor da posição no vetor entrada	
		a=a+1;
		}//Fim if
		else if(i==31){//Inicio Else if

		}//fim else if
	
	return valor_pego3;
	}//Fim método para Passagem de valores

	
}//Fim Classe
public class Saida {//inicio classe
	
	public int saida_int[];
	public char saida_char[];
	int contador_saida_int=0;
	int tamanho_saida_int=30;
	char tamanho_saida_char=30;
	private int valor_antigo_pego=0;
	private char valor_antigo_pego_char=' ';
	int retorno2=0;
	int retorno3=0;
	int retorno4=0;

	Entrada outraEntrada = new Entrada();




	public void tamanho_vetor_saida(){//Inicio Método que define tamanho do vetor como 30
				
		saida_int = new int [tamanho_saida_int];
		saida_char= new char[tamanho_saida_char];
		

		}//fecha Tamanho

	public int passagem_int(int valor_antigo_pego){//Inicio método para passagem de valores inteiros
		saida_int[contador_saida_int]= valor_antigo_pego;
	return valor_antigo_pego;

	}//Fim método Passagem int
	public char passagem_char(char valor_antigo_pego_char){//Inicio Método para passagem de valores char

		saida_char[contador_saida_int]= valor_antigo_pego_char;	
	return valor_antigo_pego_char;

	}//Fom método passagem CHar
	



}//Fim Classe
public class Impressao {//inicio classe

	int retorno_impressao=0;
	Entrada outraEntrada = new Entrada();

	Buffer_circular outroBuffer_circular = new Buffer_circular();

	public void gera_atraso(){//Inicio método que gera atraso
	 try {
				Thread.sleep(1000);
	 		 } catch (Exception e) {
					e.printStackTrace();
				  } // fim catch
		
	}//fim método que gera atraso

	public int impressao(){//Inicio Método para Impressão
	
		outraEntrada.imprime_vetor_entrada();//Chama método para imprimir valor entrada
		outroBuffer_circular.incrementa_contadorA();
		outroBuffer_circular.incrementa_contadorB();
		outroBuffer_circular.incrementa_contadorC();
		return retorno_impressao;
	}//Fim método para impressão



}//Fim classe
import java.util.Scanner;
public class Buffer_circular extends Entrada {//inicio classe
	Scanner input = new Scanner(System.in);


int buffer_int[];
char buffer_char[];
int tamanho_entrada_buffer_int=5;
char tamanho_entrada_buffer_char=5;
static int contador_buffer=0;
static int valor_pego_buffer=0;
char metodo_a='A';
char metodo_b='B';
char metodo_c='C';


static int contador_antigo_buffer=0;
static int valor_antigo_pego=0;
static char valor_antigo_pego_char;
int contador_metodoA=0;
int contador_metodoB=0;
int contador_metodoC=0;
int j=0;
int b=0;
int c=0;
int retornoa=0;
int retornob=0;
int retornoc=0;
int retornod=0;
int contador_saida_int=0;




	Entrada umaEntrada = new Entrada();

	Saida umaSaida = new Saida();



	public void tamanho_vetor_buffer(){//Inicio Método que define tamanho dos vetores como 5
				
		buffer_int = new int [tamanho_entrada_buffer_int];
		buffer_char = new char [tamanho_entrada_buffer_char];
		
	}//fecha Tamanho

	public int testa_buffer_cheio_ou_naoA(int valor_pego){//Inicio Método testa_bufferA
	

	if (contador_buffer==5)
		 System.exit(0);
	
			
	else 	
		
		
		umaEntrada.passagem_valor_inteiro(valor_pego);		
		buffer_int[contador_buffer]= valor_pego;
		buffer_char[contador_buffer]= metodo_a;
		contador_buffer=contador_buffer+1;
		return valor_pego;
		
		
	}//Fim método testa buffer


	public int testa_buffer_cheio_ou_naoB(int valor_pego2){//Inicio Método testa_bufferB
	

	if (contador_buffer==5)
		 System.exit(0);
	
			
	else 	
		
		umaEntrada.passagem_valor_inteiro2(valor_pego2);
		buffer_int[contador_buffer]= valor_pego2;
		buffer_char[contador_buffer]= metodo_b;
		contador_buffer=contador_buffer+1;
		
		return valor_pego2;
	}//Fim método testa bufferB


	public int testa_buffer_cheio_ou_naoC(int valor_pego3){//Inicio Método testa_bufferc
	

	if (contador_buffer==5)
		 System.exit(0);
	
			
	else 	
		
		umaEntrada.passagem_valor_inteiro3(valor_pego3);
		buffer_int[contador_buffer]= valor_pego3;
		buffer_char[contador_buffer]= metodo_c;
		contador_buffer=contador_buffer+1;
		
		return valor_pego3;
	}//Fim método testa bufferc


	public int testa_buffer_cheio_ou_naoD(){//Inicio Método testa_bufferD
	

	if (contador_buffer==0)
		 System.exit(0);
	
			
	else 	
		
		umaSaida.passagem_int(valor_antigo_pego);
		umaSaida.passagem_char(valor_antigo_pego_char);
		contador_saida_int=contador_saida_int+1;
				
		buffer_int[contador_antigo_buffer]= valor_antigo_pego;
		buffer_char[contador_antigo_buffer]= valor_antigo_pego_char;
		contador_antigo_buffer=contador_antigo_buffer+1;
		
		return retornod;
	}//Fim método testa bufferD

	public void incrementa_contadorA(){ //Inicio método que incrementa contador métodoA
	for (j=0; j<5; j++){//Inicio for j
			if (buffer_char[j]=='A')
				contador_metodoA=contador_metodoA+1;

	}//Fim for j

	System.out.println("Método A foi chamado:"+contador_metodoA);
		System.out.print("  Vezes");
	
	}//Fim método que incrementa contador MétodoA

	public void incrementa_contadorB(){ //Inicio método que incrementa contador métodoB
	for (b=0; b<5; b++){//Inicio for b
			if (buffer_char[b]=='B')
				contador_metodoB=contador_metodoB+1;

	}//Fim for j

	System.out.println("Método B foi chamado:"+contador_metodoB);
		System.out.print("  Vezes");
		
	}//Fim método que incrementa contador MétodoB


	public void incrementa_contadorC(){ //Inicio método que incrementa contador métodoc
	for (c=0; c<5; c++){//Inicio for c
			if (buffer_char[c]=='C')
				contador_metodoC=contador_metodoC+1;

	}//Fim for j

	System.out.println("Método C foi chamado:"+contador_metodoB);
		System.out.print("  Vezes");
	
	}//Fim método que incrementa contador MétodoC


}//Fim classe
Aparece o seguinte erro, dependendo do numero randomico:

Executando primeiro if

Exception in thread "main" java.lang.NullPointerException

at Entrada.passagem_valor_inteiro(Entrada.java:57)

at Buffer_circular.testa_buffer_cheio_ou_naoA(Buffer_circular.java:58)

at Principal.main(Principal.java:36)

Compartilhar este post


Link para o post
Compartilhar em outros sites
//inicio classe

//se valor rand entre 0 e 0,25, ativa métodoA

// fim if

 

Evite comentários inúteis. Comentar o que os métodos fazem ou dar nomes auto-descritivos para os métodos,que é importante,você não fez..

 

Sem postar a classe dos metodos nao tem como compilar né...

 

 

Tem um monte de coisa que eu não entendi e você vai ter que explicar:

 

 

public void aux_metodoA(){		
	this.contador_buffer=contador_buffer;
	valor_pego=0;
	valor_pego= entrada[contador_buffer];
}

 public void aux_metodoB() {		
	this.contador_buffer=contador_buffer;
	valor_pego=0;
	valor_pego= entrada[contador_buffer];
}

 public void aux_metodoC(){		
	this.contador_buffer=contador_buffer;
	valor_pego=0;
	valor_pego= entrada[contador_buffer];
 }

 

P/ quê 3 métodos que fazem a mesma coisa sendo que,o que muda, é o objeto que recebe a mensagem?

 

E p/ quê tanta variável de classe??

 

 

Entrada.java

 

- Na classe Entrada,você inicia a variavel valor 2x,pra sobrescrever no ultimo comando...

 

- você declara um 'i' que só vai ser usado p/ imprimir o negócio...

 

- Aí tem o contador_buffer... Ele começa com zero e termina com zero..Então porque criar uma variávle só p/ guardar um 0 que não é mexido? E é this.contador_buffer=contador_buffer. O método não tem argumentos e a única classe que estende a Entrada.java (pelo que você postou) é o principal.java. você está atribuindo ao objeto o valor que ele já tem...

 

- Eu trocaria

 

public int tamanho_vetor_entrada(){//Inicio Método que define tamanho do vetor como 30
	entrada = new int [tamanho_entrada];
	return tamanho_entrada;
}

 

por

public Entrada() {
  entrada = new int[30]
 }
 public int getTamanho() { return entrada.length; }

 

- Aqui também dá p/ simplificar:

 public void incrementa_entrada(){//Inicio incrementa_entrada
	for(int i=0; i<tamanho_entrada; i++) {
		entrada[i]=valor;
		valor= valor+1;
	}
}

 

public void incrementa_entrada() {
for(int i=0;i<entrada.length;i++,valor++)
	entrada[i] = valor;

 

- O for em

for (int i=0;i<30; i++)

pode ser trocado por entrada.length.

 

- E por que você tem um Scanner input = new Scanner(System.in); que nem é usado?

 

 

Saida.java

 

- você define 4 valores de retornos iguais:

int retorno1=0;
int retorno2=0;
int retorno3=0;
int retorno4=0;

Use return 0 direto

 

- Novamente eu trocaria tamanho_vetor_saida por um construtor (não faz muito sentido você alocar espaço e retornar zero)

 

-Em aux_metodoD você está atribuindo o valor que já está armazenado:

this.valor_antigo_pego=valor_antigo_pego;
	this.valor_antigo_pego_char=valor_antigo_pego_char;

 

- Não entendi isso:

public int impressao() {
	outraEntrada.imprime_vetor_entrada();
	outroBuffer_circular.incrementa_contadorA();
	outroBuffer_circular.incrementa_contadorB();
	outroBuffer_circular.incrementa_contadorC();
	return retorno4;
}

Se for só pra incrementar um contador em outra classe, acho que seria melhor tornar o método static (como ainda me perco nesses lances de pode-nao-pode desse raio de modificador,não tenho certeza)

 

- Pq você está imprimindo um objeto Entrada vazio?

Entrada outraEntrada = new Entrada();

 

Buffer-circular.java

 

Basicamente as mesmas observações anteriores.

 

- Pq você fecha todo o programa quando o buffer está cheio?

public int testa_buffer_cheio_ou_naoA(){
	if (contador_buffer==5)
		 System.exit(0);
	else
		outra2Entrada.aux_metodoA();
	this.valor_pego=valor_pego;
	buffer_int[contador_buffer]= valor_pego;
	buffer_char[contador_buffer]= metodo_a;
	contador_buffer=contador_buffer+1;
return retornoa;	 
}

 

Aqui você também tem aquela história de baixa coesão : o método que deveria apenas retornar se o buffer está cheio ou não, faz mais coisas do que deveria. Operação com as Entradas você faz FORA desse método (e de preferencia fora da classe, porque não vi relacionamento nenhum entre elas. Uma nem herda nada da outra. Seguindo a lógica, o meio de entrada -- que define o que vai ser guardado -- estende o buffer, e não o programa inteiro estende a entradar)

 

- Por que 4 métodos p/ testar se o buffer esta cheio?

 public bool bufferVazio() { return (contador_buffer == 0); }

 

-

int j=0;
int b=0;
int c=0;
int retornoa=0;
int retornob=0;
int retornoc=0;
int retornod=0;
int retorno_incr_a=0;
int retorno_incr_b=0;
int retorno_incr_c=0;
int retorno_tamanho=0;

E mais variáveis de retorno e de controle que são usadas "uma única vez na vida". Coloque diretamente o valor do retorno.

 

-

public int incrementa_contadorB(){
	for (b=0; b<5; b++){
			if (buffer_char[b]=='B')
				contador_metodoB=contador_metodoB+1;
	}

	System.out.println("Método B foi chamado:"+contador_metodoB);
	System.out.print("  Vezes");
	return retorno_incr_b;
}

 

Isso pode ser trocado por

 public int incrementa_contador(char Letra) {
  int contador = 0;
 for(int i=0;i<buffer_char.length;i++)
 if(buffer_char[i] == Letra) contador++;
}

 

E os println vão fora daí,afinal não se pode assumir que o indivíduo que usa a classe sempre quer imprimir essas mensagens.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Exception in thread "main" java.lang.NullPointerException

 

você está acessando um endereco de memoria nulo. Provavelmente não alocou ou tá faltando espaco (nao sei se a JVM trabalha com limite de memoria antes de comecar a devolver null)

Compartilhar este post


Link para o post
Compartilhar em outros sites

if (a<=30){//Inicio If

valor_pego= entrada[a];//pega valor da posição no vetor entrada	
a=a+1;
}//Fim if
else if(a==31){//Inicio Else if

	}//fim else if

 

Por que o else vazio? se não vai fazer nada mão declare. E o limite está errado.Provavelmente o null pointer eh disso.

 

- Outra coisa confusa é umBuffer_circular.testa_buffer_cheio_ou_naoA(valor_pego); Onde você declarou essa variavel no main? Tipos primitivos em java são passados por valor.Se quiser guardar alguma coisa,use objetos Integer ou Character como argumento. Isso tb deixa a implementacao da funcao um caos,porque na classe você tem a mesma variavel que o argumento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.