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=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(…); declare e inicialize o contador como variavel global
, acho k resolvera a questão.
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<Registro> registros = new ArrayList<Registro>();
{
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 < 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 <= 3 && custo < 1)
return 0;
else {
return custo;
}
}
}
Realmente não entendi seu problema, veja que vai imprimir normalmente seus tipos MUSIC
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<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><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.
>