Массивы с различными типами данных, то есть строки и целые числа. (Objectorientend) - PullRequest
9 голосов
/ 06 января 2010

Например, у меня

3 книги: Booknumber (int), Booktitle (string), Booklanguage (string), Bookprice (int).

теперь я хочу иметь массив с именем books[3][4].

Я получаю данные, которые я установил через setBooknumber следующим образом:
Book1.getBooknumber(), Book1.getBooktitle(),...,Book3.getBookprice().

Теперь, как я понимаю это books[3][4] array. Я не могу назвать это String books[][] = new String [3][4]. Потому что я не могу получить Booknumber (int).

Я не хочу, чтобы Booknumber был String, ни Bookprice. Как я это понимаю, пожалуйста?

Теперь уточним.

У меня есть 2 класса.

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

//constructor

//get

//set
}

и

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

Ответы [ 5 ]

28 голосов
/ 06 января 2010
public class Book
{
    public int number;
    public String title;
    public String language;
    public int price;

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

затем объявите ваш массив как:

Book[] books = new Book[3];

EDIT: В ответ на путаницу О.П. Book должен быть объектом, а не массивом. Каждая книга должна быть создана сама по себе (через правильно разработанный конструктор) и затем добавлена ​​в массив. На самом деле, я бы не использовал массив, но ArrayList. Другими словами, вы пытаетесь поместить данные в контейнеры, которые не подходят для выполняемой задачи.

Я бы рискнул, что 50% программистов выбирают правильную структуру данных для ваших данных. Алгоритмы естественным образом следуют, если есть хороший выбор структуры.

Когда все сделано правильно, ваш класс пользовательского интерфейса будет выглядеть так: Изменить: Обобщения добавлены в следующий фрагмент кода.

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

и т.д.

теперь вы можете использовать интерфейс Коллекции и делать что-то вроде:

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);
3 голосов
/ 06 января 2010

Обратите внимание на повторение Book в Booknumber (int), Booktitle (string), Booklanguage (string), Bookprice (int) - оно кричит о типе класса.

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

Теперь вы можете просто иметь:

Book[] books = new Books[3];

Если вам нужны массивы, вы можете объявить их как массив объектов, вставив в них Integer и String:

Object books[3][4]
2 голосов
/ 16 марта 2013

@ NoCanDo: Вы не можете создать массив с разными типами данных, потому что java поддерживает только переменные с определенным типом данных или объектом. Когда вы создаете массив, вы собираете набор похожих переменных - почти как расширенная переменная. Поэтому все переменные должны быть одного типа. Java не может дифференцировать тип данных вашей переменной, если вы не укажете ей, что это такое. Пример: int говорит, что все ваши объявленные переменные имеют тип данных int. Что вы можете сделать, это создать 3 массива с соответствующей информацией.

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

Теперь, один индекс дает вам всю информацию для этой книги. Пример: все ваши массивы с индексом 0 ([0]) содержат информацию для книги 1.

1 голос
/ 06 января 2010

использовать тип объекта т.е. объект книги [3] [4];

0 голосов
/ 06 января 2010

Почему бы не создать класс Книга со свойствами: Число, Название и Цена. Затем хранить их в одномерном массиве? Таким образом, вместо звонка

Book[i][j] 

.. чтобы получить название книги, звоните

Book[i].Title

Мне кажется, что это было бы немного более управляемым и дружественным к коду.

...