web-dev-qa-db-fra.com

Tableau Java 3D attribuer des valeurs

J'ai un tableau qui ressemble à ceci

static String[][][] School= new String[1000][20][5]; 
  • Dans le premier crochet, je sauvegarde le nom de la classe
  • Dans la seconde, je garde un identifiant d'étudiant
  • Dans la troisième, j'enregistre des informations sur l'élève (son nom, son nom de famille, etc.).

J'attribue d'abord tous les noms de classe, puis j'attribue à chaque classe son identifiant d'étudiant et je peux ensuite renseigner leurs informations.

Comment puis-je le faire? J'ai essayé avec par exemple 

School[i] = "A1";

mais ça ne marche pas.

EDIT: Ou existe-t-il un autre moyen de sauvegarder ces 3 choses? (nom de la classe, ses étudiants et son iformation)

6
user3549340
static String[][][] School= new String[1000][20][5]; 

Considérez la figure qui a 3 dimensions.

Ainsi, lorsque vous insérez School[0][0][0]="A1", cela signifie que vous avez entré un élément à la position 0,0,0.

À partir de 0,0,0, cela vous amènera à la position 1000,20,5.

Vous pouvez insérer comme ceci, mais vous avez tellement d'éléments.

School[0][0][0]="A1"
School[0][0][1]="A2"
School[0][0][2]="A3"
.....
School[0][1][0]="B1"
School[0][1][1]="B2"
School[0][1][2]="B3"
......

En 3D, les éléments de tableau ressemblent à

int[3][4][2] array3D
// means Three (4x2) 2 Dimensional Arrays 

 int[4][2]
 //means Four 1 dimensional arrays.

Maintenant comment ajouter des éléments dans un tableau 3D?

Au début, vous pouvez utiliser directement

int[][][] threeDArray = 
    {  { {1,   2,  3}, { 4,  5,  6}, { 7,  8,  9} },
       { {10, 11, 12}, {13, 14, 15}, {16, 17, 18} },
       { {19, 20, 21}, {22, 23, 24}, {25, 26, 27} } };

C'est une tâche très fastidieuse dans votre cas, car vous souhaitez insérer des détails à chaque position . Comme vous avez des enregistrements 1000.

Votre tableau aura des éléments comme celui-ci

enter image description here

NOTE: Il n'est pas recommandé d'utiliser un tableau 3D à cette fin.

Suggestion : Déclarer une classe avec trois Strings créer un constructeur avec ces trois paramètres et mettre getter et setters pour obtenir et définir des valeurs via Objects

17
CoderCroc

Je suggérerai au lieu d'utiliser un tableau 3D, vous créerez une classe Student qui contiendra toutes les informations pour un étudiant et une classe pour SchoolClass qui contiendra une liste d'élèves de la classe et le nom de la classe et vous pourrez gérer un Array of SchoolClass pour servir le but.

De cette façon, vous pourrez mieux le gérer.

J'espère que cela t'aides

3
Sanjeev

Tout d'abord, les champs variables commencent généralement par des lettres minuscules avec un texte de chameau.

static String[][][] school= new String[1000][20][5];

Deuxièmement, les tableaux ne fonctionnent pas comme ça. La chaîne [] [] [] contient {{{entry ...} entrée ...} entrée ...} . Les entrées peuvent contenir des doublons, ce qui en fait une méthode irréalisable car vous obtiendrez {"3A" , "1", "PersonName"} et {"3A", "1", "DifferentPersonName"} dans le même tableau. Chaque dimension de tableau contient des dimensions supplémentaires, à savoir {"3A", {"1", {"Nom de la personne"}, {"NomPersonne différent"}}, donc

School[i] = "A1"; est une erreur de syntaxe, car vous devez mettre String [] [] dans String [i] [] []:

School[i] = {{"A1","PersonName"}};

Je crois qu'une solution ici serait d'utiliser HashMaps. Les entrées répétées vont s’écraser. Dans ce cas, le code sera:

// The actual HashMap!
static final HashMap<String, HashMap<String, String>> school
=new HashMap<String, HashMap<String, String>>();

/**
 * How to use an entry using the above HashSet:
 * 
 * @param className The name of the class.
 * @param id The id.
 * @param details The details.
 */
void addEntry(final String className, final String id, final String details){
  HashMap<String, String>value=school.get(className);
  // If the class already exists, use it, otherwise make new HashMap.
  (value==null ? value = new HashMap<String, String>() : value)
  // Here is how to put in the value mapping.
  .put(id, details);
  // Put it back in. This updates the entry.
  school.put(value);
}

/**
 * How to get (iterate through) entries from the above HashSet:
 * 
 * @return An array of students in format "class id details"
 */
String[] getStudentsSet(){
  // This is an iterator.
  Iterator<Entry<String, HashMap<String, String>>>iterator=
      school.entrySet().iterator();
  Entry<String, HashMap<String, String>>next;
  String now;
  // This is for testing
  final ArrayList<String>list=new ArrayList<String>();
  while(iterator.hasNext()){
    // Load new class name
    now=(next=iterator.next()).getKey();
    Iterator<Entry<String, String>>iteratorlv2=next.entrySet().iterator();
    while(iterator.hasNext()){
      final Entry<String, String>entry=iterator.next();
      /* This is the student from class "now", id "entry.getKey()", and details "entry.getValue()"
       * Change this line to what you want, or what you would like to use entries for.
       */
      final String student=now+" "+entry.getKey()+" "+entry.getValue();
      // This is for testing
      list.add(student);
    }
  }
  // This is what prints to the console so you know this thing works.
  for(final String o:list) System.out.println(o);
  return list.toArray(new String[list.size()]);
}
0
Unihedron

Votre tableau ne fera pas ce que vous attendez de lui.

Pensez au tableau comme à un tableau 3D, chaque élément constituant un point. Si vous spécifiez un seul index, vous dites essentiellement à l'ordinateur "OK, je veux attribuer "A1" à cette tranche du tableau (dans votre exemple, vous essayez de faire quelque chose qui ressemble à String[][] elementAtI = "A1";). Maintenant cela n'a pas de sens, n'est-ce pas?

Pour obtenir un seul élément dans le tableau, vous devez spécifier les trois index, un peu comme dans l'espace 3D, vous devez spécifier les trois coordonnées pour localiser un point:

School[3][4][5] = "A1";

Ce qui pourrait être une meilleure idée qu'un tableau 3D, ce sont des objets. Tout ranger dans un tableau fonctionne, mais ce n'est pas aussi lisible que d'avoir un SchoolClass[], où chaque SchoolClass a un name et un tableau de Students, et chaque Student a un ID, name, etc.

0
awksp