2010-01-06 8 views
8

Na przykład mamTablice o różnych typach danych, tj. Ciągi i liczby całkowite. (Objectorientend)

3 książki: Booknumber (int), Booktitle (string), Booklanguage (string), Bookprice (int).

teraz chcę mieć tablicę o nazwie books[3][4].

jestem gettin dane mi ustawić poprzez setBooknumber tak:
Book1.getBooknumber(), Book1.getBooktitle(),...,Book3.getBookprice().

Teraz jak mogę zrealizować ten books[3][4] array. Nie mogę tego nazwać String books[][] = new String [3][4]. Ponieważ nie mogę dostać do niego Booknumber (int).

Nie chcę, aby Booknumber był łańcuchem ani Bookprice. Jak mogę to zrealizować, proszę?

Teraz do dalszego opracowania.

Mam 2 klasy.

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

//constructor 

//get 

//set 
} 

i

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

ludzie nadal używają tablic ?! – Shawn

+0

Dlaczego ma to być tablica tablic? –

+0

Bo to jest to, co próbuję uzyskać działa. Nie ma znaczenia, jak brzydkie jest to, ani jak głupie. To jest mój własny cel i chcę to zrobić, abym mógł zrozumieć, dlaczego to nie zadziałało, jak to działa i PÓŹNIEJ, jak to zrobić inaczej. –

Odpowiedz

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

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

następnie zadeklaruj tablicę jako:

Book[] books = new Book[3]; 

EDYCJA: W odpowiedzi na zamieszanie O.P. książka powinna być obiektem, a nie tablicą. Każda książka powinna zostać stworzona na własnej (przez odpowiednio zaprojektowany konstruktor), a następnie dodana do tablicy. W rzeczywistości nie używałbym tablicy, ale ArrayList. Innymi słowy, próbujesz wymusić dane w kontenerach, które nie są odpowiednie dla danego zadania.

Zaryzykowałbym, że 50% programowania polega na wyborze właściwej struktury danych dla danych. Algorytmy pojawiają się naturalnie, jeśli istnieje dobry wybór struktury.

Po poprawnym wykonaniu otrzymasz klasę interfejsu użytkownika: Edytuj: Generics dodano do poniższego fragmentu kodu.

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

itp

teraz można korzystać z interfejsu zbiorów i zrobić coś takiego:

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

Ja drugi ten komentarz. Powinieneś zdecydowanie rozważyć utworzenie niestandardowego typu zamiast trzymać go w wielowymiarowej tablicy z ogólnym typem obiektu. Stały odlew jest oznaką złego projektu. –

+0

Nie rozumiem tego. Czy możesz wyjaśnić dalej? –

+0

Mówi, że książka nie powinna być tablicą. Jest to typ złożony i powinien być reprezentowany przez klasę. – Chuck

3

Wskazówka powtarzanie Book w Booknumber (int), Booktitle (string), Booklanguage (string), Bookprice (int) - krzyczy do typu klasy.

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

Teraz możesz po prostu mieć:

Book[] books = new Books[3]; 

Jeśli chcesz tablic można deklarować go jako obiekt Array insert Integer i String do niego:

Object books[3][4] 
+0

Działa, ale byłbym wkurzony wszystkimi rzutami podczas próby odczytu danych. –

+0

Co? (15 znaków granicznych) –

+0

Teraz, kiedy został on zredagowany, mój komentarz wygląda trochę idiotycznie. +1 dla edycji dotyczącej powtórzenia "książki" w nazwach pól. To zapach, który rzeczywiście krzyczy o refaktoryzację. –

0

Dlaczego nie stworzyć klasę Book z właściwości: numer, tytuł i cenę. Następnie przechowywać je w jednowymiarowej tablicy?W ten sposób zamiast dzwonić

Book[i][j] 

..to uzyskać tytuł książki, zadzwoń

Book[i].Title 

Wydaje mi się, że będzie to nieco łatwiejsze w zarządzaniu i obsłudze kod.

+0

Bo to nie jest to, czego chcę. –

+0

Dlaczego to jest problem, aby zrobić to w ten sposób? Poza tym prawdopodobnie jest to jedyny sposób, w jaki kod jest o wiele łatwiejszy do zrozumienia. –

+1

Becaus Nadal nie chcę tego i nie jest to tym, co staram się zrozumieć. Samouczam się w Javie. Nie pomaga mi to, gdy ludzie kują hunderdy różnych kodów.Chcę pozostać w MOIM danym "kodeksie", aby móc go zrozumieć, a następnie przejść do czegoś innego. –

1

użyć typu obiektu tj. Księgi obiektów [3] [4];

2

@NoCanDo: Nie można utworzyć tablicy z różnymi typami danych, ponieważ Java obsługuje tylko zmienne z określonym typem danych lub obiektem. Tworząc tablicę, zestawia się razem zestaw podobnych zmiennych - prawie jak zmienna rozszerzona. Wszystkie zmienne muszą być zatem tego samego typu. Java nie może rozróżnić typu danych twojej zmiennej, chyba że powiesz, co to jest. Przykład: int mówi, że wszystkie zadeklarowane przez ciebie zmienne mają typ danych: int. Możesz utworzyć 3 tablice z odpowiednimi informacjami.

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

Teraz jeden numer indeksu daje wszystkie informacje o tej książce. Np .: Wszystkie twoje tablice z numerem indeksu 0 ([0]) mają informacje do książki 1.

Powiązane problemy