Implementando Interface

28 respostas
Mitnick8

Boas,

Tenho mais um codigo que está me deixando com os cabelos brancos apesar dos 22 anos ...

Tenho uma inteface:

public interface GeradorPrimos {

    java.util.List<Integer> primeosAte(int n);
    
}

Porém da um erro linha 3 da inteface...

Tenho que implementar essa classe:

public class Questao_02 {

    public int pegaNumero() {
        int num = Integer.parseInt(JOptionPane.showInputDialog(null, "Número: "));
        return num;
    }

    public String calcula() {
        int valorMax = pegaNumero();
        boolean composto = false;
        for (int n = 2; n < (valorMax - 1); n++) {
            if (valorMax % n == 0) {
                composto = true;
            }
        }
        String resp = "";
        if (composto == true) {
            resp = "Composto";
        } else {
            resp = "Numero Primo";
        }
        return resp;
    }

    public static void main(String[] args) {
        Questao_02 q = new Questao_02();
        System.out.println(q.calcula());

    }
}

Como eu posso implementar e como depois chamar ?

28 Respostas

B
Mitnick8:
Boas,

Tenho mais um codigo que está me deixando com os cabelos brancos apesar dos 22 anos ...

Tenho uma inteface:

Public intefacecpublic interface GeradorPrimos {

    java.util.List<Integer> primeosAte(int n);
    
}

Porém da um erro linha 3 da inteface...

Dá porque você é desatento e não digitou direito na hora de criar sua interface. Quiquiéisso é essa de "Public intefacecpublic" ?

Mitnick8

Digitei o código errado aqui no Fórum mais no Netbeans está correcto.

romarcio

Tem certeza que da erro na interface? Não tem nada errado com ela.

Já para implementa-la vc faz assim:

import javax.swing.*;
import java.util.*;

public class Questao_02 implements GeradorPrimos {

	public List<Integer> primeosAte(int n){
		List<Integer> list = new ArrayList<Integer>();
		/// e aqui vc coloca o código que quizer
		return list;
	}
       //demais códigos da classe
}
H

Acho que faltou o public na declaração do método.

public interface GeradorPrimos {

    public java.util.List<Integer> primeosAte(int n);
    
}
romarcio
henriquejhc:
Acho que faltou o public na declaração do método.
public interface GeradorPrimos {

    public java.util.List<Integer> primeosAte(int n);
    
}

Não henriquejhc, não é isso não.

Quando criamos um método em uma interface, esse método deve ser public e abstract, mas não precisamos declara-lo assim, pq o compilador sabe que ele é public e abstract.

Então, poderiamos ter as seguintes declarações:

java.util.List<Integer> primeosAte(int n);
ou
public java.util.List<Integer> primeosAte(int n);
ou
public abstract java.util.List<Integer> primeosAte(int n);
ou
abstract java.util.List<Integer> primeosAte(int n);
ou
abstract public java.util.List<Integer> primeosAte(int n);

Todas essas formas são aceitas pelo compilador.

Mitnick8

Continua dando erro na intefarce e ainda não consgui implementa-la.

Eric_Yuzo

E qual é a mensagem do erro?

Mitnick8

“generics are not supported in -source 1.4 (use -source 5 or higher to enable gererics”

Esta é a mensagem que me é informada.

Eric_Yuzo

Seu programa está usando a versão 1.4, portanto não suporta a utiliação de Generics, que foi implementado no java 1.5.

Você está mesmo usando a versão 1.4 do jdk?

sidzuza

Troque para:

1. public interface GeradorPrimos 2. { 3. public java.util.List Integer primeosAte(int n); 4. 5. }

Você deve estar usando o JDK 1.4 que não pode ser usado com generics

sidzuza

Opa, não tinha visto a resposta do Eric

Mitnick8

Onde encotro a versão mais atualizada o JDK

Eric_Yuzo

sidzuza:
Troque para:

1. public interface GeradorPrimos 2. { 3. public java.util.List Integer primeosAte(int n); 4. 5. }


O Integer não está sobrando?

Eric_Yuzo

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Mitnick8

Incrivelmente baixei o JDK e o erro continua o mesmo :s

romarcio

Mas vc baixou o JDK ou o JRE?

Se foi mesmo o JDK, sua variavel de ambiente deve estar setada para o JDK 1.4, vc deve altera-la para a nova versão instalada.

sidzuza

Eric Yuzo:

sidzuza wrote:Troque para:

1. 1. public interface GeradorPrimos     
   2. 2. {    
   3. 3.    public java.util.List Integer  primeosAte(int n);    
   4. 4.         
   5. 5. }   

1. public interface GeradorPrimos 2. { 3. public java.util.List Integer primeosAte(int n); 4. 5. }

O Integer não está sobrando?

Opa, tem razão!

Mitnick8

Mas vc baixou o JDK ou o JRE?

Se foi mesmo o JDK, sua variavel de ambiente deve estar setada para o JDK 1.4, vc deve altera-la para a nova versão instalada.

Baixei o JDK e baixei também a nova versão do NetBeans, mais como faço para aterar para a nova versão?

romarcio

Da uma lida aqui, tem um passo a passo de como fazer: http://www.guj.com.br/content/articles/installation/j2sdkinstall.pdf

ViniGodoy

O problema não é esse. E ele pouco tem a ver com a versão do Java instalada. Uma das configurações de projeto do seu netbeans está dizendo que você quer código compatível com Java 4.
Isso é definido por uma das flags do compilador, que no caso é a -source. Na mão, você dá a opção assim:
javac -source 1.4 SeuPrograma.java

Você deve procurar aí na sua IDE por essa configuração. Eu não uso o netbeans.

Um outro problema no seu código é que os numeros são “primos” e não “prim[color=red]e[/color]os”.

Eric_Yuzo

Não conhecia este recurso.

Vini, já chegou a compilar classes desta forma? O resultado é bom?

Legal a informação. Valeu.

ViniGodoy

Ok.

Baixei o Netbeans aqui.
Clique com o botão direito sobre seu projeto. E clique em propriedades. Na aba “códigos fonte”, em “Formato do código Fonte/Binário” verifique se está marcada a opção JDK 5 (ver figura em anexo).

Em construir/compilação, certifique-se que não há a opção -source 1.4 em “Opções adicionais do compilador” (ver figura 2, em anexo).

Já sim. É muito interessante. Claro que tem algumas limitações, mas funciona direitinho.

Você tem tanto a opção -source, que restringe seu código fonte, quanto a opção -target, que não restringe tanto e “compatibiliza” o resultado final.
A opção -target permite, por exemplo, que você use generics, varargs e enums, e eles sejam transformados em binários compatíveis de versões anteriores do java. Como a maioria sabe (ou deveria saber) esses recursos aproximam-se mais de “sintax suggars” do que de funcionalidades reais da linguagem. Os generics, por exemplo, tem o type erasure e, portanto, praticamente não existem no bytecode, mesmo do Java 5 (apenas algumas informações de reflection existem). Os varargs são transformados em arrays comuns, autoboxing e unboxing são transformadas na sua construção completa.




Eric_Yuzo

Legal. Muito obrigado pela informação.

Mitnick8

era exatamente isso vini valeu brother até mais…

Mitnick8

Ainda sim, estou com duvida na hora de fazer a implementação, pois não estou sabendo como chamar ela, e como por o codigo dentro do método.

eis a interface:

public interface GeradorPrimos {

    java.util.List<Integer> primeosAte(int n);
    
}

e a classe:

import java.util.ArrayList;
import java.util.List;

public class Questao_01 implements GeradorPrimos{
    public static boolean primo(int numero) {
        if (numero < 2)
            return false;

        boolean result = true;
        double metade = numero / 2;
        for (double i = 2; i <= metade; i++) {
            if (numero % i == 0) {
                result = false;
                break;
            }
        }
        return result;
    }

    public static void main(String[]args) {
        for (int i = 0; i < 30; i++)
            if (primo(i)) {
                System.out.println(i);
            }
    }
	public List<Integer> primeosAte(int n){
		List<Integer> list = new ArrayList<Integer>();
		return list;
	}
}

Como faço essa implementação, e tenho outras duas classes para implementar nesta mesma interface, pergunto se isso é possível.

Mitnick8

Alguém pode me ajudar a implementar essa classe com a interface citada?

Eric_Yuzo

A interface já está implementada na sua classe. Já foi declarado que interface vai implementar e foi declarado o método. Falta apenas colocar o código que conta os primos (não primeos), que é o mesmo que está no método main, mas ao invés de dar um print na tela, deve adicionar o número na lista.

Mitnick8

Mais como eu faço isso amigo?

Criado 27 de novembro de 2010
Ultima resposta 1 de dez. de 2010
Respostas 28
Participantes 7