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

Глава 6

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

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

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

Решение 2

Модифицируем предыдущий вариант программы таким образом, чтобы в класс Chapter вложить внутренний (вложенный) класс Paragraph, который имеет структуру, аналогичную той, которую имел класс Chapter до модификации. Соответственно в качестве одной из переменных поместим в класс Chapter двумерный массив объектов типа Paragraph, чтобы учесть множество параграфов в каждой главе. Напомню, что класс Chapter сам является вложенным в класс Book. И класс Book имеет одномерный массив объектов типа Chapter.

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


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;
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 ");
}
fin.close();
}//Book construct
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;
Paragraph par[][] = new Paragraph[15][4];
int k = par.length;
Chapter (int j, String s, int p) throws IOException {
num = j;
name = s;
pgs = p;
Stream fin1 = new Stream(System.in);
try {
fin1 = Filer.open("data1.txt");
}
catch (FileNotFoundException e) {
System.out.println("Five tries up");
System.out.println("Connecting to keyboard by default");
}
// try read file
try {
int h = 0;
for(;;){
int i = 0;
for(;;){
String s1 = fin1.readLine();
if(s1.length() == 0)break;
par[h][i] = new Paragraph((i+1), s1, random_01(20,50));
i++;
}
h++;
}
}
catch (EOFException e) {
System.out.println(" All data is reading 1");
}
fin1.close();
}//Chapter construct
void write () {
System.out.println(" Chapter " + num + " "+ '"' + name + '"' + " " + pgs + " pages as manuscripn" );
for (int z = num-1;z < num;z++){
for (int j = 0;j < 4;j++){
par[z][j].write();
}
}
}
class Paragraph {
int numP;
String nameP;
long pgsP;
Paragraph (int j, String n, int s ) {
numP = j;
nameP = n;
pgsP = s;
}
void write () {
// System.out.println(" " + numP + " "+ '"' + nameP + '"' + " " + pgsP + " pages " );
System.out.println(" " + nameP + '"' + " " + pgsP + " pages " );
}
}//Paragraph
}//Chapter
int random_01 (int min, int max ){
int z =0;
while(z < min ){
z = (int) (Math.random()* max);
}
return z;
}
}//Book


Результат :

Judy Bishop "Java 2" 590 pages

Chapter 1 ""Introduction"," 34 pages as manuscripn
1.1 Welcom to Java" 46 pages
1.2 Work of progaraming Source" 42 pages
1.3 Methodics" 43 pages
1.4 Beginn work to Java" 48 pages
Chapter 2 " "Simple Program"," 44 pages as manuscripn
2.1 Demonstration of program " 32 pages
2.2 Structur of progaram " 39 pages
2.3 Base of object programming " 28 pages
2.4 Output methods " 27 pages
Chapter 3 " "Types and Methods"," 28 pages as manuscripn
3.1 Talk to type " 21 pages
3.2 Cicle for " 20 pages
3.3 Create metods " 47 pages
3.4 Send parameters and give result " 21 pages
Chapter 4 " "Input and Output"," 35 pages as manuscripn
4.1 Interactive inpute of data " 36 pages
4.2 Freunde interface " 35 pages
4.3 Create pockets and accsept to it " 36 pages
4.4 Operators if-else " 25 pages
Chapter 5 " "Manage to stream"," 26 pages as manuscripn
5.1 Welcom to Java" 27 pages
5.2 Work of progaraming Source" 37 pages
5.3 Methodics" 42 pages
5.4 Beginn work to Java" 42 pages
Chapter 6 " "Massives and Tables", " 45 pages as manuscripn
6.1 Demonstration of program " 23 pages
6.2 Structur of progaram " 43 pages
6.3 Base of object programming " 32 pages
6.4 Output methods " 35 pages
Chapter 7 " "Formatting", " 21 pages as manuscripn
7.1 Talk to type " 35 pages
7.2 Cicle for " 39 pages
7.3 Create metods " 38 pages
7.4 Send parameters and give result " 36 pages
Chapter 8 " "Objects:employing to practic", " 39 pages as manuscripn
8.1 Interactive inpute of data " 34 pages
8.2 Freunde interface " 21 pages
8.3 Create pockets and accsept to it " 45 pages
8.4 Operators if-else " 21 pages
Chapter 9 " "Abstracting and Heritance", " 36 pages as manuscripn
9.1 Welcom to Java" 20 pages
9.2 Work of progaraming Source" 20 pages
9.3 Methodics" 21 pages
9.4 Beginn work to Java" 22 pages
Chapter 10 " "Graphics and user Interfaces", " 27 pages as manuscripn
10.1 Demonstration of program " 30 pages
10.2 Structur of progaram " 40 pages
10.3 Base of object programming " 43 pages
10.4 Output methods " 44 pages
Chapter 11 " "Manage of events", " 39 pages as manuscripn
11.1 Talk to type " 43 pages
11.2 Cicle for " 35 pages
11.3 Create metods " 48 pages
11.4 Send parameters and give result " 22 pages
Chapter 12 " "Applets in action", " 35 pages as manuscripn
12.1 Interactive inpute of data " 39 pages
12.2 Freunde interface " 32 pages
12.3 Create pockets and accsept to it " 34 pages
12.4 Operators if-else " 33 pages
Chapter 13 " "Work with several routing", " 44 pages as manuscripn
13.1 Demonstration of program " 46 pages
13.2 Structur of progaram " 34 pages
13.3 Base of object programming " 32 pages
13.4 Output methods " 28 pages
Chapter 14 " "Work in Net", " 47 pages as manuscripn
14.1 Talk to type " 28 pages
14.2 Cicle for " 26 pages
14.3 Create metods " 26 pages
14.4 Send parameters and give result " 32 pages
Chapter 15 " "Datastructures and algorithms"" 46 pages as manuscripn
15.1 Interactive inpute of data " 33 pages
15.2 Freunde interface " 43 pages
15.3 Create pockets and accsept to it " 40 pages
15.4 Operators if-else " 27 pages

Анализ

Итак расширим класс Chapter, добавив к нему класс Paragraph.
И объявим и инициируем в классе Chapter двумерный массив типа paragraph.

Paragraph par[][] = new Paragraph[15][4];

Инициируем его циклическим чтением данных из файла.
Естественно у нас должен быть для этого двойной цикл:

// try read file
try {

int h = 0;
for(;;){
int i = 0;
for(;;){
String s1 = fin1.readLine();
if(s1.length() == 0)break;
par[h][i] = new Paragraph((i+1), s1, random_01(20,50));
i++;
}
h++;
}
}
catch (EOFException e) {
System.out.println(" All data is reading 1");
}
fin1.close();

Хотя мы считываем данные в двумерный массив из одного файла, разделителем массивов является пустая строка. Строки до пустой строки считываются в один массив строк, после пустой строки - в другой имассив строк, и так до конца файла. У нас получается инициированный двумерный массив массивов строк. Поскольку в каждой главе несколько (массив) параграфов.

Программа довольно интересна. Тройное вложение классов. Считывание данных из файла в двумерный массив

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

- Тройное вложение классов
- Одномерный и двумерный массивы объектов типа Chapter и Paragraph соответственно.
- Считывание данных из файла в двумерный массив, разделитель при считывании - пустая строка.
- Метод write() внешнего класса, который вызывает метод write() вложенного класса, который вызывает метод write() вложенного класса.


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

Hosted by uCoz