Chamar métodos de uma classe na outra

9 respostas
I

Ai galera!!!
Estou a desenvolver um programa em java de uma companhia de telecomunicação.
Estou com problemas em chamar um método de uma classe na outra

//o metodo conta o numero de registo de uma lista

public class Cliente implements ICliente {

public int getNRegisto(TipoRegisto tipo)

{

int contador = 0;

for(int i=0; i<registos.size(); i++){

if(registos.get(i).getTipo() == tipo)

contador++;

}

return contador;

}



}

// este metodo, tem que ver o numero de registos e a fazer a condicao

public double pagar(double custo) {

int contador=cliente.getNRegisto(TipoRegisto.MUSIC);

if (contador<=3 && custo<1)

return 0;

else{

return custo;

}

}

9 Respostas

Marcelo_de_Andrade

Começa lendo isso aqui: http://www.guj.com.br/java/287484-gujnautas-how-to

Põe teu código dentro da TAG [ code ] e informa qual problema está ocorrendo. Qual o erro que apresenta?

I

nao consigo obter o valor da variavel contador

lalau

ivandropina:
Ai galera!!!
Estou a desenvolver um programa em java de uma companhia de telecomunicação.
Estou com problemas em chamar um método de uma classe na outra

//o metodo conta o numero de registo de uma lista

public class Cliente implements ICliente {

public int getNRegisto(TipoRegisto tipo)

{

int contador = 0;

for(int i=0; i<registos.size(); i++){

if(registos.get(i).getTipo() == tipo)

contador++;

}

return contador;

}



}

// este metodo, tem que ver o numero de registos e a fazer a condicao

public double pagar(double custo) {

int contador=cliente.getNRegisto(TipoRegisto.MUSIC);

if (contador<=3 && custo<1)

return 0;

else{

return custo;

}

}</blockquote>

Boa tarde…
A sua variavel contador esta a ser inicializada sempre com o valor Zero
repare isso no metodo getNRegisto(…); :wink: declare e inicialize o contador como variavel global
, acho k resolvera a questão.

abs

I

Continuo com o mesmo problema

JavaThai

Mano Declare sua variavel Contador fora dos metodos e altera um deles para por exemplo contadorAuxiliar.

ribclauport

Olhe simulei aqui as classes com dados meus veja:

package teste;

public class Registro {
	
	public Registro(int tipo) {
		this.tipo = tipo;
	}
	public int tipo;

	public int getTipo() {
		return tipo;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}
}
package teste;

public class TipoRegisto {
	public static final int MUSIC = 1;
	public static final int OTHER = 2;
}
package teste;

public interface ICliente {
	
}
package teste;

import java.util.ArrayList;

public class Cliente implements ICliente {
	public static void main(String[] args) {
		new Cliente().pagar(1500);
	}
	
	
	int contador = 0;
	public ArrayList&lt;Registro&gt; registros = new ArrayList&lt;Registro&gt;();
	
	{
		registros.add(new Registro(TipoRegisto.MUSIC));
		registros.add(new Registro(TipoRegisto.MUSIC));
		registros.add(new Registro(TipoRegisto.OTHER));
		registros.add(new Registro(TipoRegisto.OTHER));
		registros.add(new Registro(TipoRegisto.OTHER));
		
	}

	public int getNRegisto(int tipo) {

		for (int i = 0; i &lt; registros.size(); i++) {
			if (registros.get(i).getTipo() == tipo)
				contador++;
		}
		return contador;

	}

	// este metodo, tem que ver o numero de registos e a fazer a condicao

	public double pagar(double custo) {
		contador = getNRegisto(TipoRegisto.MUSIC);
		//vai imprimir dois aqui
		System.out.println(contador);
		
		if (contador &lt;= 3 && custo &lt; 1)
			return 0;
		else {
			return custo;
		}
	}
}

Realmente não entendi seu problema, veja que vai imprimir normalmente seus tipos MUSIC

I
vou colocar o codigo para ver se podem ajudar na parte do contador
package pacotes;

import cliente.Cliente;
import p2.util.Data;
import p2.util.Hora;
import p2.util.Tempo;
import registo.TipoRegisto;


public class Basic15 extends PacoteDefault {

	public String getNome() {
		return "Basic 15";
	}
	//
	//gratituito 6 Gbytes = 6000000 kbyte
	@Override
	public double paga_internet(long trafego) {
	
		if (trafego <=6000000)//6 Gbytes=6000000 kbytes 
			return 0;
		else{
			double custo;
			long paga=trafego-6000000;
			custo=paga*0.01;
			return custo;
		}
	}

	@Override
	public double paga_telefone(String num,Tempo tempo,int duracao) {
		double custo = 0;
		Tempo tempoMin = new Tempo (new Data(), new Hora("21:00:0")); 
		Tempo tempoMax = tempoMin.clone(); 
		tempoMax.somaDias(1); 
		tempoMax.setHora(new Hora("9:00:0")); 
		
		
		
		if(num.startsWith("2")){
			if(((tempo.compareTo(tempoMin) >= 0 && tempo.compareTo(new Tempo (tempoMin.getData().clone(), new Hora("24:0:0"))) <= 0) ||
					(tempo.compareTo(new Tempo (tempoMax.getData().clone(), new Hora("0:0:0"))) >= 0 && tempo.compareTo(tempoMax) <= 0))){ 
				return 0;
		}else
			custo=0.1*duracao;
			return custo;
	}
		if(num.startsWith("9"))
			custo=0.35*duracao;
			return custo;
	}
	
	public double paga_netmovel(long trafego,Tempo tempo) {

		if (trafego <=100000)//100 Mbytes=100000 kbytes
			return 0;
		else{	
			double custo;
			long paga=trafego-100000;
			custo=paga*0.01;
			return custo;
		}
	}
/**
 * cliente.getNRegisto(TipoRegisto.INTERNET)
 * 
	public double paga_clube_video(double custo,Tempo tempo) {
		
		int contadorAuxiliar=cliente.getNRegisto(TipoRegisto.CLUBE);
		if(contador==1 && custo<3)
		return custo;
		else{
			return custo;
		}
	}
**/

	@Override
	public double paga_clube_video(double custo,Tempo tempo) {
	
		if(custo<3)
		return 0;
		else{
			return custo;
		}
	}
	int contadorAuxiliar;
	@Override
	public double paga_musicShop(double custo) {
		 
		Cliente cliente = null;
		contadorAuxiliar=cliente.getNRegisto(TipoRegisto.CLUBE);
		if(contadorAuxiliar<3 && custo<1)
		return custo;
		else{
			return custo;
			}
	}
	@Override
	public double getCusto_mensal() {
		
		return 35;
	}
}
package cliente;
import java.util.LinkedList;
import java.util.List;
import pacotes.TipoPacote;
import registo.Registo;
import registo.TipoRegisto;


public class Cliente implements ICliente {


	private int telefone;
	private TipoPacote pacote;
	public List<Registo> registos = new LinkedList<Registo>();
	
	
	public Cliente(int telefone, TipoPacote pacote) {
		
		this.telefone = telefone;
		this.pacote = pacote;
	}
	
	public Cliente(int telefone, TipoPacote pacote, List<Registo>registos) {
		
		this.telefone = telefone;
		this.pacote = pacote;
	}

	public int getTelefone() {
		return this.telefone;
	}

	public TipoPacote getPacote() {
		return this.pacote;
	}
	
	public boolean adicionarRegisto(Registo registo){
		try{
			registos.add(registo);
			return true;
	
		}
		catch (Exception e)
		{
			return false;
		}

	}	
	

	public String getFaturacao(TipoRegisto tipo)
	{
		String resulFaturacao = "";
		for(int i=0; i<registos.size(); i++){
			if(registos.get(i).getTipo() == tipo)
				resulFaturacao = resulFaturacao+"\n "+registos.get(i).imprimefactura();
		}
		resulFaturacao = resulFaturacao +"\n\nTotal da fatura: " + getCustoTotalServico(tipo);
		return resulFaturacao;

	}
	int contador=0;
	public int getNRegisto(TipoRegisto tipo)
	{
		for(int i=0; i<registos.size(); i++){
			if(registos.get(i).getTipo() == tipo)
				contador++;
		}
		return contador;
	}

	
	public double getFaturacao_mensal(TipoRegisto tipo)
	{

		double resulFaturacao =0;
			resulFaturacao = resulFaturacao + getCustoTotalServico(tipo);
		return resulFaturacao;
		

	}
	
	
	private float getCustoTotalServico (TipoRegisto tiporeg)
	{
		float custoTotal = 0;
		for(int i=0; i<registos.size(); i++){
			if(registos.get(i).getTipo() == tiporeg)
				custoTotal += registos.get(i).getCusto() ;
		}
return custoTotal;
	}
}
ribclauport

Mas qual o erro?, veja no seu caso é erro de lógica mesmo, ou seja você não está monitorando os argumentos veja:

int contador=0;  
    public int getNRegisto(TipoRegisto tipo)  
    {  
        for(int i=0; i&lt;registos.size(); i++){  
            if(registos.get(i).getTipo() == tipo)  
                contador++;  
        }  
        return contador;  
    }

coloque um break point nesse ponto, e veja quais os valores para tipo, e contador, ou seja, nesse método você tem uma lista, um if comparando tipos e uma incrementação em contador, não vejo uma forma de não encontar o erro!
Você debugou?, se não souber debugar e quiser resolver rapidamente, coloque saídas no console mesmo…

exemplo:

int contador=0;  
    public int getNRegisto(TipoRegisto tipo)  
    { 
        System.out.prinln("tamanhod da lista: " + registros.size);
        for(int i=0; i&gt;&lt;registos.size(); i++){  
           System.out.println("Iteração numero: "+ i);
            if(registos.get(i).getTipo() == tipo)  
                 System.out.println("Tipo encontrado. valor do contador "+   contador++);  
        }  
        return contador;  
    }

Se você está tendo um comportamento não esperado tem que inspecionar os aspectos relativos às variáveis, não sabemos como está executando tais metodos, e com quais entradas para as variáveis, mas veja, seu problema está totalmente relacionado ao uso da ferramenta debug de sua IDE.
>

ViniGodoy

Ivan, por favor, leia esse tópico:

Ele explica a forma correta de se postar no GUJ. Por exemplo, você não deu um título descritivo, nem usou corretamente a tag code.

Criado 25 de novembro de 2012
Ultima resposta 26 de nov. de 2012
Respostas 9
Participantes 6