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

Глава 6

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

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

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

Решение 3

Модифицируем предыдущуй программу. Поскольку в каждом параграфе имеется массив строк, относящийся к содержанию параграфа, то создадим трехмерный массив объектов типа String, для хранения содержимого каждого параграфа. Мы могли бы создать трехмерный массив самих объектов класса Context. Класс Context мог бы быть вложенным в класс Paragraph. Но ограничимся пока массивом строк.

Для чего нами взят трехмерный массив? Для того что, третье измерение массива является массивом строк (содержанием параграфа), второе измерение массива - является массивом параграфов, первое измерение массива - является массивом глав.

Таким образом каждой главе в массиве глав соответствует свой массив параграфов, каждому параграфу в массиве параграфов соответствует свой массив строк.

Для хранения данных о массиве глав мы используем файл data.txt
Для хранения данных о массиве параграфов мы используем файл data1.txt
Для хранения данных о массиве строк мы используем файл data2.txt

Массивы параграфов в data1.txt и массивы строк в data2.txt разделены между собой пробелами.

Вот примерное содержание файла с массивом названий глав:

1.1 Welcom to Java
1.2 Work of progaraming Source
1.3 Methodics
1.4 Beginn work to Java

2.1 Demonstration of program
2.2 Structur of progaram
2.3 Base of object programming
2.4 Output methods

3.1 Talk to type
3.2 Cicle for
3.3 Create metods
3.4 Send parameters and give result
3.5 Create metods

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


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;
//////////////////////////
fun1("data.txt",ch);
/////////////////////////////
}//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][10];
int k = par.length;
Chapter (int j, String s, int p) throws IOException {
num = j;
name = s;
pgs = p;

for(int i =0;i < 15;i++){

for(int l =0; l < 10;l++){
String s2 = "";
par[i][l] = new Paragraph((l+1), s2, random_01(20,50));
}
}
///////////////////////////////////////
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 st1 = fin1.readLine();
if(st1.length() == 0)break;
par[h][i] = new Paragraph((i+1), st1, 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 < 10;j++){
if (par[z][j].nameP.length()==0)break;
par[z][j].write();
}
}
}
class Paragraph {
int numP;
String nameP;
long pgsP;
String con[][][] = new String[15][10][10];

Paragraph (int j, String n, int s )throws IOException {

numP = j;
nameP = n;
pgsP = s;
for(int v =0;v<15;v++){
for(int i =0;i<10;i++){
for(int l =0; l <10;l++){
String s2 = ""; con[v][i][l] = s2;
}
}
}
///////////////////////////////////////
Stream fin2 = new Stream(System.in);
try {
fin2 = Filer.open("data2.txt");
}
catch (FileNotFoundException e) {
System.out.println("Five tries up");
System.out.println("Connecting to keyboard by default");
}
// try read file
try {
for(int q =0;q < 15;q++){
for(int h = 0;h < 10;h++){
for(int i=0;i < 10;i++){
String st1 = fin2.readLine();
if(st1.length() == 0)break;
con[q][h][i] = st1;
}
}
}
}
catch (EOFException e) {
//System.out.println(" All data is reading 2");
}
fin2.close();
///////////////////////////////
}//Paragraph construct

void write () {

System.out.println(" " + nameP + '"' + " " + pgsP + " pages " );
for (int x = num-1;x < num;x++){
for (int z = numP-1;z < numP;z++){
for (int j = 0;j < 10;j++){
if (con[x][z][j].length()==0)break;
System.out.println(" " + con[x][z][j] );
}
}
}
}

}//Paragraph
}//Chapter

///////////////////////////////
int random_01 (int min, int max ){

int z =0;
while(z < min ){
z = (int) (Math.random()* max);
}
return z;
}
///////////////////
void fun1(String str, Chapter[] ch) throws IOException{
Stream fin = new Stream(System.in);
try {
fin = Filer.open(str);
}
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();
}//fun1

///////////////////

}//Book


Результат :

Программа имеет очень длинный вывод.
поэтому даем его в сокращенном виде.

Book information
-------------------
Judy Bishop "Java 2" 590 pages

Chapter 1 ""Introduction"," 49 pages as manuscripn
1.1 Welcom to Java" 38 pages
1.1.1 Welcom to Java
1.1.2 Hello!
1.2 Work of progaraming Source" 38 pages
1.2.1 Welcom to Java
1.3 Methodics" 39 pages
1.3.1 Welcom to Java
1.4 Beginn work to Java" 34 pages
1.4.1 Welcom to Java
1.4.2 Very well!
1.4.3 You a good man!
1.5 Beginn work to Java" 46 pages
1.5.1 Welcom to Java
1.6 Beginn work to Java" 37 pages
1.6.1 Welcom to Java
Chapter 2 " "Simple Program"," 28 pages as manuscripn
2.1 Demonstration of program " 46 pages
2.1.1 Welcom to Java
2.2 Structur of progaram " 35 pages
2.2.1 Nice to Java!
2.2.2 Judy Bishop!
2.2.3 Albert Volos
2.3 Base of object programming " 39 pages
2.3.1 Welcom to Java
2.4 Output methods " 37 pages
2.4.1 Welcom to Java
Chapter 3 " "Types and Methods"," 43 pages as manuscripn

...

14.5 Send parameters and give result " 44 pages

14.5.1 Welcom to Java
14.6 Send parameters and give result " 47 pages
14.6.1 Welcom to Java
14.7 Send parameters and give result " 29 pages
14.7.1 Welcom to Java
Chapter 15 " "Datastructures and algorithms"" 41 pages as manuscripn
15.1 Interactive inpute of data " 39 pages
15.1.1 Welcom to Java
15.2 Freunde interface " 21 pages
15.2.1 Welcom to Java
15.3 Create pockets and accsept to it " 27 pages
15.3.1 Welcom to Java
15.4 Operators if-else " 49 pages
15.4.1 Welcom to Java
15.5 Operators if-else " 20 pages
15.5.1 Welcom to Java
15.6 Operators if-else " 44 pages
15.6.1 Welcom to Java
15.7 Operators if-else " 33 pages
15.7.1 Welcom to Java
15.8 Operators if-else " 42 pages
15.8.1 Welcom to Java
15.9 Operators if-else " 30 pages
15.9.1 Welcom to Java
15.9.2 Hello!
15.9.3 Java 2
15.10 Operators if-else " 36 pages
15.10.1 Welcom to Java

Анализ

При выводе обратите внимание на нумерацию глав, параграфов и строк. Каждой главе соответствуют свои параграфы и каждому параграфу - свой строки.

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

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


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

Hosted by uCoz