Question tableau 2 dimensions [Résolu]

azerty_qwerty 36 Messages postés vendredi 23 mars 2018Date d'inscription 5 juillet 2018 Dernière intervention - 27 juin 2018 à 01:30 - Dernière réponse : azerty_qwerty 36 Messages postés vendredi 23 mars 2018Date d'inscription 5 juillet 2018 Dernière intervention
- 5 juil. 2018 à 02:22
Bonjour,

Dans le code ci-dessous :

String[][] donnees=new String[220][3];


220 : signifie t'il 220 lignes ?
3 : 3 colonnes ?

J'ai du mal à comprendre malgré les nombreuses explications sur le net.

Merci
Afficher la suite 

Votre réponse

9 réponses

choukie12 55 Messages postés vendredi 11 mars 2016Date d'inscription 27 juin 2018 Dernière intervention - 27 juin 2018 à 11:31
0
Merci
Hello,

Le premier est les colonnes, et le deuxieme les lignes.

Donc 200 colonnes et 3 lignes

Jérémy
Commenter la réponse de choukie12
jordane45 21534 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 4 juillet 2018 Dernière intervention - 27 juin 2018 à 12:26
0
Merci
Bonjour,

Contrairement à ce que dit choukie .....

c'est : LIGNES / COLONNES

Au array à 2 dimensions... un un array d'array....
par exemple :
Un array 2/5
 Monarray[2][5] 

revient à :
code java>
Monarray[0] = subarray[5]
Monarray[1] = subarray[5]


Et si on représente les "items" dans le subarray
Monarray[0] = item[0] item[1] item[2] item[3] item[4]
Monarray[1] = item[0] item[1] item[2] item[3] item[4]


choukie12 55 Messages postés vendredi 11 mars 2016Date d'inscription 27 juin 2018 Dernière intervention - 27 juin 2018 à 13:22
C'est la même chose, rien n'est figé.
Le plus important est l'index de tes données
Commenter la réponse de jordane45
KX 15596 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 4 juillet 2018 Dernière intervention - Modifié par KX le 27/06/2018 à 13:12
0
Merci
Bonjour,

En réalité tu fais comme tu veux. Ce n'est qu'une représentation de l'esprit (merci Excel...)

Tu peux faire
donnees[ligne][colonne]
(ce qui est généralement fait) ou
donnees[colonne][ligne]
mais ce n'est pas Java qui t'empêchera de faire l'un ou l'autre...
D'ailleurs tu pourrais très bien avoir tes données dans un String[][] sans qu'il n'y ait de notion de lignes ou de colonnes.

Remarque : Si tu fais
new String[220][3]
ça n'empêche pas des modifications ultérieures.
Exemple :
donnees[42] = new String[50];
permettra de remplacer le String[] qui est en donnees[42] par un tableau plus grand (et complètement perdre le String[3] qui était dedans au départ), on peut bien sûr faire des tableaux plus petits, voire mettre des null...

C'est pour ça qu'en général il ne faut pas trop faire de suppositions sur le code, avec des boucles du genre i < 220 et j < 3, il vaut mieux dynamiquement chercher la taille des tableaux avec donnee.length et donnees[i].length

Avec ce genre d'imbrication (un tableau qui contient d'autres tableaux) il faut surtout concevoir ton application avec une notion de conteneurs et de contenus :
Est-ce que tu veux des lignes qui contiennent des colonnes ou des colonnes qui contiennent des lignes ?
Commenter la réponse de KX
azerty_qwerty 36 Messages postés vendredi 23 mars 2018Date d'inscription 5 juillet 2018 Dernière intervention - 29 juin 2018 à 00:25
0
Merci
Merci pour les explications. C'est plus clair.

En fait je souhaite que sur chaque ligne il y aie une date (dans la première colonne sous la forme 29.06.2018), un titre (dans la seconde colonne) et une date dans la 3eme colonne sous la forme 20180629 afin de trier l'élément le plus récent en haut.

Je souhaite charger chaque date, titre et date à l'envers à partir d'un fichier .text (dans le fichier text chaque date, titre et dates à l'envers sont sur une ligne, chacun séparé par un espace tab).

Je vous ai posé cette question car en fait je souhaite que mon tableau s'agrandisse selon le chargement des données du fichier text.
azerty_qwerty 36 Messages postés vendredi 23 mars 2018Date d'inscription 5 juillet 2018 Dernière intervention - 29 juin 2018 à 00:36
Le code pour charger les données est le suivant et fonctionne bien :

String[][] donnees=new String[220][3];
String[] entetes = {"DATE", "TITRE", "date envers"};
JTable tab1 = new JTable(donnees,entetes);

try
{
BufferedReader fichier =new BufferedReader(new FileReader("/Users/moi/eclipse-workspace/DATA/donnees.txt"));
String ligne;
StringTokenizer st;
int i=0;

while ((ligne = fichier.readLine())!=null )
{
st = new StringTokenizer(ligne,"\t");

if(i>=0)
{

donnees [i][0]= st.nextToken(); //date
donnees [i][1]= st.nextToken(); //titre
donnees [i][2]= st.nextToken(); // date envers

}
i++;

}
fichier.close();
Commenter la réponse de azerty_qwerty
Twinuts 5268 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 4 juillet 2018 Dernière intervention - 29 juin 2018 à 08:39
0
Merci
Salut,

Tu auras plus de souplesse et de possibilités en utilisant le framework collections: ICI


KX 15596 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 4 juillet 2018 Dernière intervention - 29 juin 2018 à 08:54
Bonjour,

Je suis d'accord, il faut arrêter les String[][] et passer à la programmation objet. Créer une classe pour contenir les données d'une ligne et faire une List ou un Set pour manipuler l'intégralité du fichier.

Remarque : StringTokenizer est obsolète depuis Java 4 et ne devrait plus être utilisé (cf. Javadoc)
"StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead."

Quant au
new BufferedReader(new FileReader(
il y a également plus simple avec
Files.readAllLines
par exemple.
Voir ta discussion précédente pour un exemple de code et pourquoi il faut arrêter de coder en vieux Java.
Commenter la réponse de Twinuts
azerty_qwerty 36 Messages postés vendredi 23 mars 2018Date d'inscription 5 juillet 2018 Dernière intervention - 5 juil. 2018 à 02:22
0
Merci
bien noté, j'ai créé une class à partir de "AbstractTableModel"
Commenter la réponse de azerty_qwerty

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.