Назад | Начало урока | Вперед
Содержание

Глава 6

Задача 6.5 "Главы книг."

Расширьте класс, разработка которого была начата в задачах 2.10 и 3.19, чтобы он включал больше информации о каждой главе, например список из семи параграфов, количество задач, десять букв, которые являются ответами на вопросы для самоконтроля и тд.

Разработайте интерактивную программу, в которой была бы предусмотрена возможность ввода новых данных о главах по мере написания книги и вывода сведений о ее текущем состоянии. Обратите внимание на то, что в первоначальных версиях программы уже имеются три массива: массив глав, массив параграфов (которые являются объектами своего собственного класса, в котором есть названия строк и целые числа - номера страниц) и массив ответов на вопросы для самоконтроля, элементы которого имеют тип char.

Решение 1

Будем решать задачу поэтапно, постепенно модифицируя программу.

Создадим класс Book (книга) в котором будут следующие члены:
- имя автора
- название книги
- число страниц в книге
- одномерный массив объектов класса Chapter (глава)
- метод write(), который выведет эту инф на экран

Класс Chapter будет внутренним классом в классе Book, и будет по структуре почти повторять класс Book. Класс Chapter имеет всего три члена и свой метод write().

Все переменные обоих классов инициируются в соответствующих конструкторах.

Код программы:


import java.io.*;
import javagently.*;
import java.util.*;

class Books {

Books()throws IOException {
System.out.println("");
System.out.println(" Book information ");
System.out.println("-------------------");
Book b = new Book("Judy Bishop ","Java 2", 590);
b.write();
}

public static void main (String [ ] args)throws IOException {
new Books ();
}
}//Books

class Book {

String nameAuthor;
String nameBook;
long pageBook;
Chapter ch[] = new Chapter[15];
int m = ch.length;
// The constructor
Book (String a, String b, int p) throws IOException {
nameAuthor = a;
nameBook = b;
pageBook = p;
Stream fin = new Stream(System.in);
try {
fin = Filer.open("data.txt");
}
catch (FileNotFoundException e) {
System.out.println("Five tries up");
System.out.println("Connecting to keyboard by default");
}
// try read file
try {
int i = 0;
for(;;){
String s = fin.readLine();
ch[i] = new Chapter((i+1), s, random_01(20,50));
i++;
}
}
catch (EOFException e) {
System.out.println(" All data is reading ");
}
}
// a method to output the values of the object's variables
void write () {
System.out.println(nameAuthor + " \"" + nameBook + "\" " + pageBook + " pages" );
for (int j = 0;j < m;j++){
ch[j].write();
}
}
class Chapter {
int num;
String name;
long pgs;
Chapter (int j, String s, int p) {
num = j;
name = s;
pgs = p;
}

// a method to output the values of the object's variables
void write () {

System.out.println(" Chapter " + num + " "+ '"' + name + '"' + " " + pgs + " pages as manuscripn" );
}
}//Chapter

int random_01 (int min, int max ){

int z =0;
while(z < min ){
z = (int) (Math.random()* max);
}
return z;
}

}//Book


Результат :

Book information
-------------------
Judy Bishop "Java 2" 590 pages
Chapter 1 ""Introduction"," 41 pages as manuscripn
Chapter 2 " "Simple Program"," 46 pages as manuscripn
Chapter 3 " "Types and Methods"," 31 pages as manuscripn
Chapter 4 " "Input and Output"," 40 pages as manuscripn
Chapter 5 " "Manage to stream"," 31 pages as manuscripn
Chapter 6 " "Massives and Tables", " 29 pages as manuscripn
Chapter 7 " "Formatting", " 45 pages as manuscripn
Chapter 8 " "Objects:employing to practic", " 43 pages as manuscripn
Chapter 9 " "Abstracting and Heritance", " 38 pages as manuscripn
Chapter 10 " "Graphics and user Interfaces", " 20 pages as manuscripn
Chapter 11 " "Manage of events", " 24 pages as manuscripn
Chapter 12 " "Applets in action", " 37 pages as manuscripn
Chapter 13 " "Work with several routing", " 37 pages as manuscripn
Chapter 14 " "Work in Net", " 24 pages as manuscripn
Chapter 15 " "Datastructures and algorithms"" 28 pages as manuscripn

Анализ

Создадим класс Book (книга) в котором будут следующие члены:
- имя автора
- название книги
- число страниц в книге
- метод write(), который выведет эту инф на экран
- одномерный массив объектов класса Chapter (глава)

Класс Chapter будет внутренним классом в классе Book, и будет по структуре почти повторять класс Book. Класс Chapter имеет всего три члена и свой метод write().

Все переменные обоих классов инициируются в соответствующих конструкторах.

Объявление массива типа Chapter:

Chapter ch[] = new Chapter[15];
int m = ch.length;

Инициализация массива объектов типа Chapter происходит в цикле считывания данных из файла:

// try read file
try {

int i = 0;
for(;;){
String s = fin.readLine();
ch[i] = new Chapter((i+1), s, random_01(20,50));
i++;
}
}
catch (EOFException e) {
System.out.println(" All data is reading ");
}

При этом считывается из файла имя главы, и этой строкой инициируется соответствующая переменная класса Chapter. Число страниц определяется генератором случайнх чисел. А номер главы - переменной, определяющей число итераций цикла.

Метод write() класса Book вызывает в цикле соответствующий метод write() класса Chapter

// a method to output the values of the object's variables
void write () {

System.out.println(nameAuthor + " \"" + nameBook + "\" " + pageBook + " pages" );
for (int j = 0;j < m;j++){
ch[j].write();
}
}

Использованные приемы:

Класс внутри класса (вложенные классы)
Одномерный массив объектов
Инициализация массива объектов в цикле чтения данных из файла.
Метод write() внешнего класса, который вызывает метод write() внутреннего класса.


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz