2010-01-06 13 views
8

Par exemple, j'aiTableaux avec différents types de données, c'est-à-dire des chaînes et des entiers. (Objectorientend)

3 livres: Booknumber (int), Booktitle (string), Booklanguage (string), Bookprice (int).

maintenant je veux avoir un tableau appelé books[3][4].

Je suis gettin les données que je mets via setBooknumber comme ceci:
Book1.getBooknumber(), Book1.getBooktitle(),...,Book3.getBookprice().

Maintenant, comment puis-je me rends compte ce books[3][4] array. Je ne peux pas l'appeler String books[][] = new String [3][4]. Parce que je ne peux pas y entrer Booknumber (int).

Je ne veux pas que Booknumber soit String ni Bookprice. Comment je le réalise, s'il vous plait?

Maintenant, pour élaborer plus loin.

J'ai 2 classes.

public class book{ 
String Booktitle, Booklanguage; 
int Booknumber, Bookprice; 

//constructor 

//get 

//set 
} 

et

public class bookUI 
{ 
public static void main(String arg[]) 
{ 
    book book1 = new book(); 
    book book2 = new book(); 
    book book3 = new book(); 

    book1.setBooktitle(); 
    ... 
    book3.setBookprice(); 

    //Here I want to have books[3][4] Array. And gettin the data via book1.get...book3.get into the array 
} 
} 
+0

personnes utilisent encore des tableaux ?! – Shawn

+0

Pourquoi est-ce un tableau de tableaux? –

+0

Parce que c'est ce que j'essaie de faire fonctionner. Peu importe combien il est laid ou stupide. C'est mon propre objectif et je veux le faire afin que je puisse comprendre pourquoi cela n'a pas fonctionné, comment cela fonctionne, et plus tard sur la façon de le faire différemment. –

Répondre

28
public class Book 
{ 
    public int number; 
    public String title; 
    public String language; 
    public int price; 

    // Add constructor, get, set, as needed. 
} 

puis déclarez votre tableau en tant que:

Book[] books = new Book[3]; 

EDIT: En réponse à la confusion d'O.P., Book doit être un objet, pas un tableau. Chaque livre doit être créé par lui-même (via un constructeur correctement conçu), puis ajouté au tableau. En fait, je n'utiliserais pas de tableau, mais un ArrayList. En d'autres termes, vous essayez de forcer des données dans des conteneurs qui ne sont pas adaptés à la tâche en cours.

J'oserais dire que 50% de la programmation consiste à choisir la bonne structure de données pour vos données. Les algorithmes suivent naturellement s'il y a un bon choix de structure.

Lorsque vous avez terminé, votre classe d'interface utilisateur ressemble à ceci: Édition: génériques ajoutés au fragment de code suivant.

... 
ArrayList<Book> myLibrary = new ArrayList<Book>(); 
myLibrary.add(new Book(1, "Thinking In Java", "English", 4999)); 
myLibrary.add(new Book(2, "Hacking for Fun and Profit", "English", 1099); 

etc.

maintenant, vous pouvez utiliser l'interface Collections et faire quelque chose comme:

int total = 0; 
for (Book b : myLibrary) 
{ 
    total += b.price; 
    System.out.println(b); // Assuming a valid toString in the Book class 
} 
System.out.println("The total value of your library is " + total); 
+2

Je seconde ce commentaire. Vous devriez fortement envisager de créer un type personnalisé pour cela, plutôt que de le coller dans un tableau multidimensionnel avec un type Object générique. Le coulage constant est un signe de mauvaise conception. –

+0

Je ne le comprends pas. Pouvez-vous s'il vous plaît expliquer plus loin? –

+0

Il dit qu'un livre ne devrait pas être un tableau. C'est un type agrégé, et devrait être représenté par une classe. – Chuck

3

Notez la répétition de Book dans Booknumber (int), Booktitle (string), Booklanguage (string), Bookprice (int) - il crie pour un type de classe.

class Book { 
    int number; 
    String title; 
    String language; 
    int price; 
} 

Maintenant, vous pouvez simplement avoir:

Book[] books = new Books[3]; 

Si vous voulez des tableaux, vous pouvez le déclarer comme tableau d'objets un insert Integer et String en elle:

Object books[3][4] 
+0

Fonctionne, mais je serais énervé avec tout le casting en essayant de lire des données. –

+0

Quoi? (Limite de 15 caractères) –

+0

Maintenant qu'il a été édité, mon commentaire semble un peu morose. +1 pour l'édition concernant la répétition de "livre" dans les noms de champs. C'est une odeur qui coute vraiment pour le refactoring. –

0

Pourquoi ne pas créer une classe livre propriétés: numéro, le titre et le prix. Puis les stocker dans un tableau à une dimension?De cette façon, au lieu d'appeler

Book[i][j] 

..pour obtenir votre titre de livres, appelez

Book[i].Title 

Il me semble que ce serait un peu plus facile à gérer et le code convivial.

+0

Parce que ce n'est pas ce que je veux. –

+0

Pourquoi est-ce un problème de le faire de cette façon? En plus d'être probablement la seule façon dont le code est beaucoup plus facile à comprendre. –

+1

Parce que je n'en veux toujours pas et ce n'est pas ce que j'essaie de comprendre. Je suis selflearning Java. Ça ne m'aide pas quand les gens font des centaines de centaines de résolutions.Je veux rester dans mon "codeframe" donné, donc je peux le comprendre et ensuite passer à quelque chose de différent. –

1

utiliser le type d'objet ie Livres d'objets [3] [4];

2

@NoCanDo: Vous ne pouvez pas créer un tableau avec des types de données différents car Java ne prend en charge que des variables avec un type de données ou un objet spécifique. Lorsque vous créez un tableau, vous regroupez un assortiment de variables similaires - presque comme une variable étendue. Toutes les variables doivent donc être du même type. Java ne peut pas différencier le type de données de votre variable à moins que vous ne lui disiez de quoi il s'agit. Ex: int indique toutes vos variables déclarées sont de type de données int. Ce que vous pouvez faire est de créer 3 tableaux avec les informations correspondantes.

int bookNumber[] = {1, 2, 3, 4, 5};
int bookName[] = {nameOfBook1, nameOfBook2, nameOfBook3, nameOfBook4, nameOfBook5} // etc.. etc..

Maintenant, un seul numéro d'index vous donne toutes les informations pour ce livre. Ex: Tous vos tableaux avec le numéro d'index 0 ([0]) ont des informations pour le livre 1.

Questions connexes