2010-01-06 21 views
8

Por ejemplo tengoMatrices con diferentes tipos de datos, es decir, cadenas y números enteros. (Objectorientend)

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

ahora yo quiero tener una matriz llamada books[3][4].

Me estoy poniendo los datos que puse a través de setBooknumber así:
Book1.getBooknumber(), Book1.getBooktitle(),...,Book3.getBookprice().

Ahora cómo hago cuenta de esto books[3][4] array. No puedo llamarlo String books[][] = new String [3][4]. Porque no puedo obtener Booknumber (int) en él.

No deseo que Booknumber sea Cadena ni Bookprice. ¿Cómo me doy cuenta, por favor?

Ahora para elaborarlo más.

Tengo 2 clases.

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

//constructor 

//get 

//set 
} 

y

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

¿las personas todavía usan matrices? – Shawn

+0

¿Por qué tiene que ser una matriz de matrices? –

+0

Porque es lo que intento hacer funcionar. No importa qué tan feo sea o qué tan estúpido. Es mi propio objetivo y quiero hacerlo para poder entender por qué no funcionó, cómo funciona y, MÁS ADELANTE, cómo hacerlo diferente. –

Respuesta

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

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

a continuación, declare su matriz como:

Book[] books = new Book[3]; 

EDITAR: En respuesta a la confusión de O. Book, Book debe ser un objeto, no una matriz. Cada libro debe crearse por sí mismo (a través de un constructor diseñado correctamente) y luego debe agregarse a la matriz. De hecho, no usaría una matriz, sino una ArrayList. En otras palabras, intenta forzar datos en contenedores que no son adecuados para la tarea en cuestión.

Me atrevo a aventurar que el 50% de la programación es elegir la estructura de datos correcta para sus datos. Los algoritmos naturalmente siguen si hay una buena elección de estructura.

Cuando se hace correctamente, obtiene su clase de interfaz de usuario para que se vea como: Edición: genéricos agregados al siguiente fragmento de código.

... 
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.

Ahora puede utilizar la interfaz de Colecciones y hacer algo como:

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

Apoyo este comentario. Considere la posibilidad de crear un tipo personalizado para esto, en lugar de colocarlo en una matriz multidimensional con un tipo de objeto genérico. La fundición constante es un signo de mal diseño. –

+0

No lo entiendo. ¿Puedes explicar más? –

+0

Está diciendo que un libro no debería ser una matriz. Es un tipo agregado, y debe ser representado por una clase. – Chuck

3

Aviso la repetición de Book en Booknumber (int), Booktitle (string), Booklanguage (string), Bookprice (int) - que grita por un tipo de clase.

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

Ahora simplemente puede tener:

Book[] books = new Books[3]; 

Si desea matrices, se puede declarar como objeto de matriz de una inserción Integer y String en él:

Object books[3][4] 
+0

Funciona, pero me molestaría todo el casting cuando intente leer datos. –

+0

¿Qué? (Límite de 15 caracteres) –

+0

Ahora que ha sido editado, mi comentario parece un poco idiota. +1 para la edición sobre la repetición de "libro" en los nombres de campo. Ese es un olor que de hecho grita para refactorizar. –

0

Por qué no crear una clase libro con propiedades: número, título y precio. Entonces, guárdalos en una única matriz dimensional?De esta manera en lugar de llamar

Book[i][j] 

..para obtener su título de los libros, llame

Book[i].Title 

Me parece que sería un poco más manejables y el código de usar.

+0

Porque no es lo que quiero. –

+0

¿Por qué es un problema hacerlo de esta manera? Además de ser probablemente la única forma en que el código es mucho más fácil de entender. –

+1

Porque todavía no lo quiero y no es lo que trato de entender. Estoy autoaprendiendo Java. No me ayuda cuando la gente está hurgando en hunderds de diferentes codeolutions.Quiero permanecer dentro de MI "marco de código" dado, para poder entenderlo y luego moverme a algo diferente. –

1

use el tipo de objeto ie Object books [3] [4];

2

@NoCanDo: No puede crear una matriz con diferentes tipos de datos porque java solo admite variables con un tipo de datos u objeto específico. Cuando está creando una matriz, está reuniendo una variedad de variables similares, casi como una variable extendida. Todas las variables deben ser del mismo tipo, por lo tanto. Java no puede diferenciar el tipo de datos de su variable a menos que usted le diga de qué se trata. Ej: int indica que todas sus variables declaradas son del tipo de datos int. Lo que podrías hacer es crear 3 matrices con la información correspondiente.

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

Ahora, un único número de índice que da toda la información para ese libro. Ejemplo: todas las matrices con número de índice 0 ([0]) tienen información para el libro 1.

Cuestiones relacionadas