Java

Résolu/Fermé
walamefteh Messages postés 35 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 14 septembre 2009 - 2 avril 2008 à 21:25
walamefteh Messages postés 35 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 14 septembre 2009 - 4 avril 2008 à 15:26
Bonjour,
j'ai un exercice de java .il s'agit de définir une classe représentant un tableau trié d'entiers
et voila mon travail.mais le probleme à l'execution il n'affiche que le premier element de tableau
sachant qu'il n'y a aucun fautes a la compilation.merci de m'aidez pour savoir le probleme


class TrieSimple
{
private int[]tab;
int dim;
int increment;
int nbelem;

TrieSimple(int dim,int increment)
{
this.dim=dim;
this.increment=increment;
nbelem=0;
tab=new int[dim];
}

TrieSimple()
{
dim=10;
increment=2;
tab=new int[dim];
nbelem=0;
}

void inserer(int elem)
{
int i=0;int a;int j=nbelem-1;
if (nbelem==0)
tab[0]=elem;

else if (nbelem<dim)

while(i<nbelem)
{
if (tab[i]>elem)

{
while(j>=i)
{
tab[j+1]=tab[j];
j--;
}
tab[i]=elem;
}

else i++;
}

else if (nbelem==dim)
{
i=0;
dim=dim+increment;
int tab1[];
tab1=new int[dim];

tab1=tab;
i=0;j=nbelem-1;
while(i<nbelem)
{
if (tab1[i]>elem)

{
while(j>=i)
{
tab1[j+1]=tab1[j];
j--;
}
tab1[i]=elem;
}

else i++;
}

tab=tab1;
}


nbelem=nbelem+1;
}

public String ToString ()
{
int i;
String s="";
for(i=0;i<nbelem;i++)
s=s+tab[i];
return s;
}

}

class EssaiTrie
{
public static void main(String args[])
{
int dim=ESBasique.litInt("donnez le dim ");
int increment=ESBasique.litInt("donnez le increment ");
int elem=ESBasique.litInt("donnez l'element à inserer ");
TrieSimple T=new TrieSimple( dim,increment);
T.inserer(elem);
T.inserer(elem);
System.out.print(T.ToString());
}
}
A voir également:

3 réponses

tuxinet Messages postés 82 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 8 juin 2009
2 avril 2008 à 22:46
Voilà ce qui cloche :

change ta méthode main dans la classe test comme suit (c'est juste pour faire un test) :

public static void main(String[] args) {
{
int dim=8;
int increment=2;
int elem=5;
ESBasique T=new ESBasique( dim,increment);
T.inserer(elem);
T.inserer(elem);
System.out.print(T.ToString());
System.out.println();
System.out.println(elem);
}

}

Si tu exécute ton code ça donnera ça :

50
5

********************************************
Maintenant change ta méthode toString comme suit (c'est également juste pour faire un test) :

public String ToString ()
{
int i;
String s="";
for(i=0;i<nbelem;i++)
s=s+tab[i];
System.out.println(nbelem);
return s;
}
Si tu exécute ton code ça donnera ça :

2
50
5

********************************************

Si tu veux, la valeur de nbelem que tu utilise dans ta méthode toString est égale à valeure que tu lui a donné dans ton constructeur, c'est-à-dire 2 (la boucle for va être parcourue une seule fois). Elle ne changera pas, même si tu essaies de lui donner une autre valeur dans ta méthode main en faisant appel au constructeur.

Essaie de coder en utiliser les merveilleux Getters and Setters. Ajoute dans ta classe TrieSimple ça :

public void setElemValue(int n) {
nbelem = n ;
}

Maintenant modifie ta méthode main de la classe test comme ca :

public static void main(String[] args) {
{
int dim=8;
int increment=2;
int elem=5;
ESBasique T=new ESBasique( dim,increment);
T.inserer(elem);
T.inserer(elem);
T.setElemValue(elem) ;
System.out.print(T.ToString());
}

}

Tu verras donc apparaître le résultat suivant lors de l'exécution :

50000

Pour ce qui est de ton tri je n'ai pas contrôler la chose mais j'espère que tu as compris le principe.
0
walamefteh Messages postés 35 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 14 septembre 2009
2 avril 2008 à 23:56
merci bien bon travail
0
walamefteh Messages postés 35 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 14 septembre 2009
3 avril 2008 à 00:06
svp je veux savoir est ce que la methode d'insertion d'un element est juste ou non sachant que nbelem est le nombre d'elements dans le tableau
et dim est la capacité de tableau
et elem est l'element à inserer

void inserer(int elem)
{
int i=0;int a;int j=nbelem-1;
if (nbelem==0)
tab[0]=elem;

else if (nbelem<dim)

while(i<nbelem)
{
if (tab[i]>elem)

{
while(j>=i)
{
tab[j+1]=tab[j];
j--;
}
tab[i]=elem;
}

else i++;
}

else if (nbelem==dim)
{
i=0;
dim=dim+increment;
int tab1[];
tab1=new int[dim];

tab1=tab;
i=0;j=nbelem-1;
while(i<nbelem)
{
if (tab1[i]>elem)

{
while(j>=i)
{
tab1[j+1]=tab1[j];
j--;
}
tab1[i]=elem;
}

else i++;
}

tab=tab1;
}


nbelem=nbelem+1;
}
0
tuxinet Messages postés 82 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 8 juin 2009
4 avril 2008 à 11:31
salut,

à mon avis, tu te compliques un peu la vie avec ta méthode insérer, car pour ajouter des valeurs dans un tableau, rien de plus simple que d'utiliser une boucle for. Je te conseille de faire ça de la manière suivante :

Tu crée une classe avec ton constructeur (avec le tableau) comme suit :



public class SortArray {
private int [] tab ;

// Constructor
public SortArray() {
super();
tab = new int[10]; ; // construit un tableau de longueur 10
}

// User methods
public int [] createArray() { // rempli le tableau aléatoirement (Math.random)
for (int i = 0; i < tab.length; i++) {
tab[i] = (int) (Math.random() * 100);
}
return tab ;
}

public int [] sortArray(int [] tab) { // tri le tableau
int iMin; // indiceMinimum : position du tableau où se trouve la valeure minimale
int min; // Minimum : valeure minimale

for (int i = 0; i < tab.length; i++) {
min = tab[i];
iMin = i;

for (int j = i + 1; j < tab.length; j++) { // i + 1 parce qu'on souhaite tester la prochaine valeure du tableau
if (tab[j] < min) {
min = tab[j];
iMin = j;
}
}
valueExchange(tab, i, iMin); // appel à la méthode valueExchange()
}
return tab ;
}

public void valueExchange(int [] tab, int i, int iMin) { // échange de deux valeures
int temp;

temp = tab[i];
tab[i] = tab[iMin];
tab[iMin] = temp;
}

public void showMessge(int [] tab) { // affiche le tableau
for (int i = 0; i < tab.length; i++) {
System.out.print(tab[i] + " ");
}
}
}

**********************************************************************
Et maintenant la classe Test (contenant le main) :

/**
*
*/

/**
* @author Tuxinet
*
*/
public class SortArrayTest {

/**
* @param args
*/
public static void main(String[] args) {

SortArray application = new SortArray();

System.out.println("Cette classe va trier les valeures d'un tableau rempli aléatoirement (de 0 à 100) par ordre croissant.");

int [] tab = application.createArray();

System.out.print("Avant le tri : ");
application.showMessge(tab);
System.out.println();

System.out.print("Après le tri : ");
application.showMessge(application.sortArray(tab));

}

}


**********************************************************************

J'éspère que tu as compris la chose. Sinon, n'hésite pas.
0
walamefteh Messages postés 35 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 14 septembre 2009
4 avril 2008 à 15:26
merci bien vraiment vous m'encouragez plus à travailler
dieu avec vous
0