Probléme d'affichage

Résolu
zy choupinette Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
zy choupinette Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'aimerai bien que qlq'un m'explique pk mon pgm ne s'affiche pas correctement en gros au lieu d'avoir des "TF,TD et TM" c'est des lignes "[Ljava.lang.String;@1242719c" qui se répète
merci




public class cocomo {
static String[] module1 = new String[80];
static String[] module2 = new String[80];
static String[] module3 = new String[80];
static String[] module4 = new String[80];
static String TF ;
static String TM;
static String TD;

 public  String[] affichage(){
	
	for(int i = 0; i<=module1.length ; i++){
		module1[i] = TF;
		module1[i+1] = TM;
		module1[i+2] = TD;	
		i= i+3;
	}
	return module1;
 }
 public String[] affichage2(){

	for(int i = 0; i<=module2.length ; i++){
		module2[i] = TF;
		module2[i+1] = TF;
		module2[i+2] = TM;
		module2[i+3] = TM;
		module2[i+4] = TD;
		module2[i+5] = TD;
		i=i+6;
	} return module2;}
 public String[] affichage3(){
	
	for(int i = 0; i<=module3.length ; i++){
		module3[i] = TF;
		module3[i+1] = TF;
		module3[i+2] = TF;
		module3[i+3] = TM;
		module3[i+4] = TM;
		module3[i+5] = TM;
		module3[i+6] = TD;
		module3[i+7] = TD;
		module3[i+8] = TD;
		i=i+9;
	} return module3;}
 public String[] affichage4(){
	
	for(int i = 0; i<=module4.length ; i++){
		module4[i] = TF;
		module4[i+1] = TF;
		module4[i+2] = TF;
		module4[i+3] = TF;
		module4[i+4] = TM;
		module4[i+5] = TM;
		module4[i+6] = TM;
		module4[i+7] = TM;
		module4[i+8] = TD;
		module4[i+9] = TD;
		module4[i+10] = TD;
		module4[i+11] = TD;
		i=i+12;
	}return module4;
}
public static void main(String args[]){
	
	
	for (int i = 0; i<=module1.length ; i++){
	
	System.out.println(module4 + "  "+ module3 + "  " + module2 +"  " + module1);
}
}}
 

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Quand tu fais System.out.println(module4); tu affiches le tableau, pas son contenu !

En fait "[Ljava.lang.String;@1242719c" correspond au résultat de la méthode toString par défaut des Object, composé d'une part du nom de la classe "[Ljava.lang.String;" (qui est la classe des tableaux de String), et d'autre part du hashCode de l'objet...

Bref, ce que tu veux toi c'est afficher les cases du tableau, tu devrais donc utiliser une méthode qui lit les cases une à une pour les afficher, par exemple en utilisant la méthode Arrays.toString(module4).

System.out.printf(Arrays.toString(module4)+"  "+Arrays.toString(module3)+"  "+Arrays.toString(module2)+" "+Arrays.toString(module1));

Remarque : sur le reste de ton code je te déconseille fortement d'utiliser des variables static globales comme tu le fais, ce n'est pas propre ! De plus tes boucles sont fausses...La confiance n'exclut pas le contrôle
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Voici un code propre et correct pour ton programme :

import java.util.Arrays;

public class Test
{
public static void affichage(int k, int sz, String TF, String TM, String TD)
{
    String[] tab = new String[sz];
    
    for (int i=0; i<sz; i++)
    {
        switch((i/k)%3)
        {
            case 0: tab[i] = TF; break;
            case 1: tab[i] = TM; break;
            case 2: tab[i] = TD; break;
        }
    }
    
    System.out.println(Arrays.toString(tab));
}

public static void main(String args[])
{
    for (int k=1; k<=4; k++)
        affichage(k,80,"TF","TM","TD");
}
}
0
zy choupinette Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
pouriez vous m'éxpliquer cette ligne "switch((i/k)%3)"
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
C'est une astuce mathématiques qui permet de combiner toutes tes méthodes d'affichage en une seule.

k est le nombre de fois que la valeur doit être répétée.
Exemple pour k=3 : 0/3=0, 1/3=0, 2/3=0, 3/3=1, 4/3=1, 5/3=1, 6/3=2, 7/3=2, 8/3=2.
On rajoute également %3 pour les valeurs suivantes : 9/3=3 → (9/3)%3=0, ce qui fait qu'on recommence un nouveau cycle 000111222000111222...
Après le switch permet juste de filtrer le résultat de la valeur calculée (0, 1 ou 2) pour mettre TF, TM, ou TD dans le tableau.
0
zy choupinette Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
merci beaucoup pour votre aide j'avoue que c'est vachement une meilleur solution ^^
0
zy choupinette Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
import java.util.Arrays;
import java.math.*;
public class Test
{
public static String[][] affichage(int module, int sz, String TF, String TM, String TD)
{
    String[][] tab = new String[module][sz];
    int k=0;
    for(int j=0; j<module;j++){
    	k=j+1;
    for (int i=0; i<sz; i++)
    {
        switch((i/k)%3)
        {
            case 0: tab[j][i] = TF; break;
            case 1: tab[j][i] = TM; break;
            case 2: tab[j][i] = TD; break;
        }
    } 
    }
    int s=0;

	return tab;
    } 
  


public static double[] duréT()
{ String[][] t=affichage(4,80,"TF","TM","TD");
    double[] tab = new double[80];
    int mo=0;
    int p=0;
    while(mo<4){
    while(p<80){
    	if(t[mo][p]==t[mo+1][p]&& t[mo][p]==t[mo+2][p]&& t[mo][p]==t[mo+3][p]){
        	tab[p]=dur(1)*4;
        }else{
        	if(t[mo][p]==t[mo+1][p]|| t[mo][p]==t[mo+2][p]|| t[mo][p]==t[mo+3][p]){
        		tab[p]=dur(1)*2;	
        	}
        	else{
        		tab[p]=dur(1)*3;
        	} }	
    	
    	p++;
    }
    
    
    }    	
	return tab;
}

public static double dur(int ta){
    double f= 0.70*1.30*Math.pow(ta, 1.05);
    double d=2.5*Math.pow(f, 0.38);
	return d;
}  
public static void main(String args[]){

	double[] tab1 = new double[80];
	for(int h=0; h<tab1.length; h++){
	tab1=duréT();
	System.out.println(tab1);}

System.out.println(0.70*1.30*Math.pow(2, 1.05));

	
      //  affichage(4,80,"TF","TM","TD");
}
}




voyez vs qlq chose qui cloche ds ce pgm ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Oui. Entre autre la boucle infinie while (mo<4) alors que mo vaut toujours 0.
Puis tu auras un problème avec System.out.println(tab1); pour les même raisons que celles que j'avais expliqué dans mon premier message : afficher un tableau ce n'est pas pareil qu'afficher son contenu. Tu dois donc utiliser System.out.println(Arrays.toString(tab1));
Enfin, ta boucle for(int h=0; h<tab1.length; h++) me paraît inutile, tu répètes 80 fois la même chose.
0
zy choupinette Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
voilaa !! j'ai oublier d'incrémenter merci :)
0