Chamar métodos de uma classe na outra

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;
}
}

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?

nao consigo obter o valor da variavel contador

[quote=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;
}
}[/quote]

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

Continuo com o mesmo problema

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

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

vou colocar o codigo para ver se podem ajudar na parte do contador

[code]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;
    

    }
    }[/code]

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;
	}
}

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.
>

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.