Question tableau 2 dimensions

Résolu
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022 - 27 juin 2018 à 01:30
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022 - 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

6 réponses

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

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

Donc 200 colonnes et 3 lignes

Jérémy
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
27 juin 2018 à 12:26
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]


0
choukie12 Messages postés 55 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 27 juin 2018 2
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
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
Modifié le 27 juin 2018 à 13:12
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 ?
0
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
29 juin 2018 à 00:25
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.
0
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
Modifié le 29 juin 2018 à 00:37
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();
0

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

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
29 juin 2018 à 08:39
Salut,

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


0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
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.
0
azerty_qwerty Messages postés 61 Date d'inscription vendredi 23 mars 2018 Statut Membre Dernière intervention 6 décembre 2022
5 juil. 2018 à 02:22
bien noté, j'ai créé une class à partir de "AbstractTableModel"
0
Rejoignez-nous