Java

estelle -  
 Nico -
j'ai un probleme en JAVA. je vous explique le probleme.
c'est une erreur que quand quand je compile.
je vous transmet le type de l'erreur et le code.

graph.java étant forcément une interface de graphTab !

voici le code et les erreur:

public interface graph
{
public void ajouterArete (int NumSrc, int NumDest);

public void ajouterSommmet (int num);

public int retournerNbSommmet ();

public int retournerNbArete ();

public void afficherSommet();

public void afficherArete();

public void SupprimerSommet(int num);

public void SupprimerArete(int NumSrc, int NumDest);

public void ParcoursProf(int NumSrc);
}

____________________

abstract class graphTab implements graph
{

Sommet som[] = new Sommet[20];
boolean connexion[][] = new boolean [20][20];
int i,j, NbSommet=0, NbArete=0;

graphTab()
{
for(int i=0;i<20;i++)
{
som[i].setsommet(i);
NbSommet++;
}
marquageSommet(-1);
}

public void ajouterArete (int NumSrc, int NumDest)
{
connexion[NumSrc][NumDest]= true ;
}

public void ajouterSommmet (int num)
{
som[num] = new Sommet (num) ;
NbSommet++;
}

public int retournerNbSommmet ()
{
return NbSommet ;
}

public int retournerNbArete ()
{

for (int i=0;i<20;i++)
{
for (int j=0;j<=i;j++)
{
if (connexion[i][j] == true)
{
NbArete++;
}
}

}
return NbArete;
}

public void afficherSommet()
{

for (i=0;i<20;i++)
if (som[i].getmarque()!=-1) System.out.println(som[i]);

}

public void afficherArete()
{
for (int i=0;i<20;i++)
{
for (int j=0;j<=i;j++)
{
if (connexion[i][j] == true)
{
System.out.println("arete : "+connexion[i]+"- "+connexion[j]);
}
}

}
}
public void supprimerSommet(int num)
{
for (int i=0;i<20;i++)
{
if (connexion[num][i] == true)
{
connexion[num][i]=false;
}
}
//si le sommet existe, on remplace sa marque par -1, ce qui signifie qu'il est supprimé
som[num].setmarque(-1);
}

public void SupprimerArete(int NumSrc, int NumDest)
{
connexion[NumSrc][NumDest] = false;
}

public void parcoursProf(int NumSrc)
{
for (int j=0;j<20;j++)
{
while (connexion[NumSrc][j] == true)
{
System.out.println(som[NumSrc]+" ");
som[i].marquage (som[NumSrc],1);
parcoursProf(j);
}
}
}

public void marquageSommet(int marque)
{
for (int i=0;i<20;i++)
som[i].marquage(som[i],marque);
}

public void voisin(int num)
{
for (i=0;i<20;i++)
{
for (int j=0;j<20;j++)
{
if (connexion[num][j]== true)
{
System.out.println("le voisin de "+num+" est : "+j);
}
}
}
}

public void main(String s)
{

graphTab g = new graphTab();//(1,2,5,8,4);
g.ajouterSommet(6);
g.ajouterSommet(9);

g.ajouterArete(1,5);
g.ajouterArete(1,8);
g.ajouterArete(1,9);
g.ajouterArete(6,9);
g.ajouterArete(4,2);
g.ajouterArete(2,1);
g.voison(1);
g.AjouterSommet(7);
g.AjouterArete(10);
}

}

______________________________

import java.awt.*;
import java.applet.*;

class Sommet {

private final int blanc = 0;
private final int noir =1;
private int num;
private int marque;

Sommet (int num) {
this.num = num;
//a la création d'un sommet les sommets sont blancs
marque = 0;
}

public int retourneSommet() {
return (num);
}

public String toString() {
return ("n°"+num+"marque : "+marque);
}

public void marquage (Sommet s, int marque)
{
if (marque == 0)
{
s.marque = 1;
}
else
{
s.marque = 0;
}
}

public int getmarque()
{
return(marque);
}
public void setmarque(int marque)
{
this.marque=marque;
}
}

_____________________

voici les erreur avec le abstract:

javac graphTab.java
graphTab.java:128: class graphTab is an abstract class. It can't be
instantiated. graphTab g = new graphTab();//(1,2,5,8,4);
^
graphTab.java:129: Method ajouterSommet(int) not found in class graphTab.
g.ajouterSommet(6);
^
graphTab.java:130: Method ajouterSommet(int) not found in class graphTab.
g.ajouterSommet(9);
^
graphTab.java:138: Method voison(int) not found in class graphTab.
g.voison(1);
^
graphTab.java:139: Method AjouterSommet(int) not found in class graphTab.
g.AjouterSommet(7);
^
graphTab.java:140: Method AjouterArete(int) not found in class graphTab.
g.AjouterArete(10);
^
6 errors

et les erreur sans les abstract:

javac graphTab.java
graphTab.java:1: class graphTab must be declared abstract. It does not
define void SupprimerSommet(int) from interface graph.class graphTab implements graph
^
graphTab.java:1: class graphTab must be declared abstract. It does not
define void ParcoursProf(int) from interface graph.class graphTab implements graph
^
graphTab.java:128: class graphTab is an abstract class. It can't be
instantiated. graphTab g = new graphTab();//(1,2,5,8,4);

graph.java étant forcément une interface de graphTab !

je vous remercie....
A voir également:

9 réponses

christien
 
en effet, j'ai compiler ton prog sur unix et je constate les meme erreur, mais je ne vois pas de solution. il est vrai que ca vien au niveau de l'abstract.
je ne vois pas quoi te dire d'autre.... le java n'est pas de mon domaine de predilection.
surement que quelqu'un dautre de plus calé va surement trouver une solution.
0
sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
Tu as dis à Java que graphTab implémente graph, et Java te dit que tu as oublié d'implémenter les méthodes SupprimerSommet(int) et ParcoursProf(int) de l'interface graph.

De plus, comme tu as déclaré ta classe graphTab comme abstract, tu n'a pas le droit de l'instancier.
On instantice pas les classes abstraites. On peut seulement les dériver.

Donc:
- dans graphTab, implémente toutes les méthodes de l'interface graph (même si tu ne met rien dedans).
- ensuite, soit tu dérive une nouvelle classe (non abstraite) de graphTab, soit tu ne déclare pas graphTab comme abstraite.
0
sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
PS: Java est sensible à la casse des caractères.

Effectivement: tu n'a pas implémenté SupprimerSommet(int), mais supprimerSommet(int).

Pour Java, SupprimerSommet et supprimerSommet sont des méthodes différentes.

Fais bien attention à la casse des caractères.
0
estelle
 
Bonjour a tous,

Merci tout d'abord de vos réponses.
Le problème est que si je ne met pas la class graphTab en abstract, il me le demande.
Si je la met comme il me le demande en abstract, je ne peux pas l'instancié (comme vous me le dites).

Que dois je faire pour que je puisse créer un objet provenant de la classe graphTab.

La je suis bloquée, je peux pas tester (en créer des objets, manipulant mes objets avec mes méthodes etc..).

Merci de vos réponses, j'en ai vraiment besoin !
0
estelle
 
Bonjour a tous,

Merci tout d'abord de vos réponses.
Le problème est que si je ne met pas la class graphTab en abstract, il me le demande.
Si je la met comme il me le demande en abstract, je ne peux pas l'instancié (comme vous me le dites).

Que dois je faire pour que je puisse créer un objet provenant de la classe graphTab.

La je suis bloquée, je peux pas tester (en créer des objets, manipulant mes objets avec mes méthodes etc..).

Merci de vos réponses, j'en ai vraiment besoin !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebsauvage Messages postés 33415 Statut Modérateur 15 667
 
Relisez ma réponse.

Vous n'avez pas besoin de déclarer graphTab en abstract.
D'ailleurs si vous voulez instancier un objet de type graphTab, vous ne devez pas déclarer la classe comme abstraite.
(Comme son nom l'indique, une classe abstraite est abstraite et ne peut pas être instanciée sous forme d'un objet concret.)

Vous devez implémenter toutes les méthodes de l'interface dont vous héritez, et retirer le mot-clé abstract de la déclaration de graphTab.

Le compilateur Java devrait alors cesser de se plaindre de l'absence d'implémentation de certaines méthodes de l'interface.
0
Nico
 
Yop,

il est clair que tu t'emmèles pas mal les pinceaux avec les orthographes des mots (attention aux majuscules et minuscules).
Implémente la méthode setSommet de la classe Sommet. Elle est manquante. En débuggant tout ca, je n'ai plus que cette erreur. Voila le résultat :
0
Nico
 
public class GraphTab implements Graph {

Sommet som[] = new Sommet[20];
boolean connexion[][] = new boolean [20][20];
int i,j, NbSommet=0, NbArete=0;

GraphTab() {
for(int i=0;i<20;i++) {
som[i].setsommet(i); /* méthode non implémentée */
NbSommet++;
}
marquageSommet(-1);
}

public void ajouterArete (int NumSrc, int NumDest) {
connexion[NumSrc][NumDest]= true ;
}

public void ajouterSommet (int num) {
som[num] = new Sommet (num) ;
NbSommet++;
}

public int retournerNbSommet () {
return NbSommet ;
}

public int retournerNbArete () {
for (int i=0;i<20;i++) {
for (int j=0;j<=i;j++) {
if (connexion[i][j] == true) {
NbArete++;
}
}
}
return NbArete;
}

public void afficherSommet() {
for (i=0;i<20;i++)
if (som[i].getmarque()!=-1)
System.out.println(som[i]);
}

public void afficherArete() {
for (int i=0;i<20;i++) {
for (int j=0;j<=i;j++) {
if (connexion[i][j] == true) {
System.out.println("arete : "+connexion[i]+"- "+connexion[j]);
}
}
}
}

public void supprimerSommet(int num) {
for (int i=0;i<20;i++) {
if (connexion[num][i] == true) {
connexion[num][i]=false;
}
}
//si le sommet existe, on remplace sa marque par -1, ce qui signifie qu'il est supprimé
som[num].setmarque(-1);
}

public void supprimerArete(int NumSrc, int NumDest) {
connexion[NumSrc][NumDest] = false;
}

public void parcoursProf(int NumSrc) {
for (int j=0;j<20;j++) {
while (connexion[NumSrc][j] == true) {
System.out.println(som[NumSrc]+" ");
som[i].marquage (som[NumSrc],1);
parcoursProf(j);
}
}
}

public void marquageSommet(int marque) {
for (int i=0;i<20;i++)
som[i].marquage(som[i],marque);
}

public void voisin(int num) {
for (i=0;i<20;i++) {
for (int j=0;j<20;j++) {
if (connexion[num][j]== true) {
System.out.println("le voisin de "+num+" est : "+j);
}
}
}
}

public static void main(String [] s) {
GraphTab g = new GraphTab();//(1,2,5,8,4);
g.ajouterSommet(6);
g.ajouterSommet(9);

g.ajouterArete(1,5);
g.ajouterArete(1,8);
g.ajouterArete(1,9);
g.ajouterArete(6,9);
g.ajouterArete(4,2);
g.ajouterArete(2,1);
g.voisin(1);
g.ajouterSommet(7);
}
}
-------------------------------------------------------------
public interface Graph {
public void ajouterArete (int NumSrc, int NumDest);

public void ajouterSommet (int num);

public int retournerNbSommet ();

public int retournerNbArete ();

public void afficherSommet();

public void afficherArete();

public void supprimerSommet(int num);

public void supprimerArete(int NumSrc, int NumDest);

public void parcoursProf(int NumSrc);
}
---------------------------------
import java.awt.*;
import java.applet.*;

class Sommet {

private final int blanc = 0;
private final int noir =1;
private int num;
private int marque;

Sommet (int num) {
this.num = num;
//a la création d'un sommet les sommets sont blancs
marque = 0;
}

public int retourneSommet() {
return (num);
}

public String toString() {
return ("n°"+num+"marque : "+marque);
}

public void setSommet(int i) {

}

public void marquage (Sommet s, int marque) {
if (marque == 0) {
s.marque = 1;
}
else {
s.marque = 0;
}
}

public int getmarque() {
return(marque);
}

public void setmarque(int marque) {
this.marque=marque;
}
}

Voila j'espère que ca t'aidera.

++

Nico
0
Nico
 
Tiens voila une correction pour ta fonction manquante. Tu n'as qu'à changer :

GraphTab() {
for(int i=0;i<20;i++) {
som[i] = new Sommet(i);
NbSommet++;
}
marquageSommet(-1);
}

Et la ca fonctionne. Bon par contre ta méthode de voisinage fait trop de boucle. Il faudrait que tu rajoutes une variable qui compte le nombre de voisin qu'elle a. Cela t'évitera de faire trop de boucles.

++

Nico
0
Nico
 
Enfin ca marche presque ... Il va encore falloir que tu bosses :p
Dans l'exemple, il ne trouve pas le sommet 2 comme voisin. Cela vient du fait que tu ne regardes pas l'arrete dans les 2 sens. Bref tu as encore du boulot meme si une grande partie est faite.

++

Nico
0