Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
230102 5к / СПО / УПП.doc
Скачиваний:
58
Добавлен:
20.04.2015
Размер:
465.41 Кб
Скачать

5. Двумерные массивы.

Двумерный массив как и одномерный в языке Javaпредставляет собой класс хранящий область памяти под одномерные массивы и их количество. Каждый одномерный массив также в сою очередь является классом хранящим непосредственно данные.

Объявление двумерных массивов в языке Javaимеет следующий вид:

тип имя переменной [][];

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

Например, для определения переменной “a” которая будет использоваться как двумерный массив целых чисел необходимо ввести следующую инструкцию:

Int a[][];

Инициализация переменной типа массив нулем обязательна:

тип имя переменной[][]=null;

Например, для определения переменной “a” которая будет использоваться как двумерный массив целых чисел необходимо ввести следующую инструкцию и инициализации ее нулем:

int a[][]=null;

Для использования объекта типа массив необходимо сначала необходимо выделить память:

имя переменной = new тип переменной [количество строк][количество столбцов];

Например, для выделения памяти под двумерный массив целых чисел, состоящий из 10 строк и 15 столбцов, который ассоциирован с переменной “a” необходимо ввести следующую инструкцию:

a=new int[10][15];

Выделение памяти под массив возможна непосредственно при объявлении переменной, тогда естественно инициализация нулем не нужна:

тип имя переменной = new тип переменной [количество строк][количество столбцов];

Например, для определения переменной “a” которая будет использоваться как двумерный массив целых чисел, состоящий из 10 строк и 15 столбцов и выделения памяти под него, необходимо ввести следующую инструкцию:

int a=new int[10][15];

Индексация элементов двумерного массива аналогична языку С, то есть от 0 до n-1, гдеn– количество строк и от 0 доm-1, гдеmколичество столбцов. При обращении к элементу массива номера строк и столбцов указываются в квадратных скобках, причем сначала указывается номер строки, а потом номер столбца.

Например для присвоения элементу 5 стоки 7 столбца двумерного массива целых чисел “a”, значения 18 необходимо ввести следующую инструкцию:

a[5][7]=18;

Количество строк и столбцов может задаваться константой или вводиться с клавиатуры, обработка двумерного массива при этом не изменяется. Освобождать память из - под массива не нужно. Для того, чтобы создать массив сначала необходимо внести количество элементов, которые должны иметь целочисленный тип, т.е. нужно написать функцию чтения целого числа. Затем пишется функция чтения непосредственно элементов массива и функция создания массива и чтения всех его элементов. Обычно подобные последовательности операций выделяют в отдельный класс. Рассмотрим эти операции на примере создания класса чтения и вывода на экран двумерного массива вещественных чисел.

import java.io.IOException;

import java.io.InputStreamReader;

import java.lang.NumbericFormatReader;

import java.lang.Double;

import java.lang.Integer

// объявляем класс

Class m_double_array_2_io {

// определяем конструктор класса по умолчанию

public m_double_array_io(){

}

// создаем функцию чтения строки

private String read_str(String prompt) {

// Выводим на экран приглашение

System.out.printt(prompt);

// Объявляем переменную в которой будет помещен

// результат ввода информации

String a;

// Определяем блок обработки исключительных ситуаций

try {

// Объявляем и создаем объект преобразования данных потока

// В текстовой вид

InputStreamReader is=new InputStreamReader(System.in);

// Объявляем текстовой буфер, длина которого соответствует

// максимальной длине строки.

char buf[] = new char[128];

// После этого в этот буфер производим чтение

is.read(buf);

// Этот буфер мы преобразовываем к строке

a=String.valueOf(buf);

// После этого закрываем блок обработки исключительных ситуаций.

}

// И описываем поведение системы в случае возникновения

// ошибки при чтении данных

catch (IO Exception e) {

System.out.println(e.getMessage());

a = null;

}

if (a = = null) return “”;

return a.trim();

}

// Создаем функцию чтения целого числа

private int read_int(String prompt) {

// Объявляем переменную в которой будет помещен

// результат ввода информации

int a = 0;

// Определяем блок обработки исключительных ситуаций

try {

a=Integer.valueOf(read_str(prompt)).intValue();

}

// И описываем поведение системы в случае возникновения

// ошибки при чтении данных

catch (NumbericFormatException e){

System.out.println(e.getMessage());

a=0;

}

return a;

}

// Создаем функцию чтения количества строк

private int read_m()

{

return read_int(“Input m”);

}

// Создаем функцию чтения количества столбцов

private int read_n()

{

return read_int(“Input n”);

}

// Создаем функцию создания массива

public double [][] make_array(int m,int n)

{

// В качестве параметра функции передается

// количество строк и столбцов массива, если какой то из этоих

// параметров равен 0, то он вводиться с клавиатуры

// то количество элементов вводится с клавиатуры

if(m==0)

{

// Повторяем функцию чтения до тех пор пока не будут

// введены корректные данных, т.е. в данном случае

// количество строк массива должно быть положительным числом

while((m=read_m())<=0)

{

// Если в качестве количества строк массива введена -1

// То будем считать, что это признак отмены ввода информации

if(m==-1)return null;

}

}

if(n==0)

{

// Повторяем функцию чтения до тех пор пока не будут

// введены корректные данных, т.е. в данном случае

// количество столбцов массива должно быть положительным числом

while((n=read_n())<=0)

{

// Если в качестве количества столбцов массива введена -1

// То будем считать, что это признак отмены ввода информации

if(n==-1)return null;

}

}

// Определяем переменную в которую поддет помещен объект

// типа массив вещественных числе и выделяем память

double a[][]=new double[m][n];

// Возвращаем объект вызывающей функции

return a; }

// Создаем функцию чтения вещественного числа

private double read_double(String prompt) {

// Объявляем переменную в которой будет помещен

// результат ввода информации

double a = 0;

// Определяем блок обработки исключительных ситуаций

try {

a=Double.valueOf(read_str(prompt)).doubleValue();

}

// И описываем поведение системы в случае возникновения

// ошибки при чтении данных

catch (NumbericFormatException e){

System.out.println(e.getMessage());

a=0;

}

return a;

}

// и наконец пишем функцию создания и чтения массива

private double[][] get_array_priv(int m,int n)

{

// Определяем переменную хранящую массив

double a[][]=null;

// Создаем объект

a=make_array(m,n);

// Если в результате получаем null, то выходим из

// функции создания массива возвращая null

if(a==null)return null;

// Читаем массив с клавиатуры

for(int i=0;i<m.length;i++)

{

for(int j=0;j<m[i].length;j++)

{

a[i]=read_double(“Input Element “+

String.valueOf(i)+”,”+

String.valueOf(j)+”:”);

}

}

return a;

}

// теперь описываем функцию ввода массива с клавиатуры

// количество элементов которого за ранее известно

public double[][] get_array (int m,int n)

{

return get_array_priv(m,n);

}

// и функцию, в которой количество элементов массива

// должно вводиться с клавиатуры

public double[][] get_array ()

{

return get_array_priv(0,0);

}

// теперь для полноты картины напишем функцию вывода массива

public void put_array(double a[][],String name)

{

//Выводим название массива

System.out.print(name+”{“);

// Если объект существует,ыводим элементы массива

if(a!=null)

{

// Определяем номер строки в которую будем выводить

// название массива

int num_name=a.length/2;

// Определяем переменную для хранения бланка, заполняющего

// пустое пространство в строках на экране не содержащих имени

// массива

String blank=””;

// Создаем бланк

for(int i=0;i<=name.length;i++)blank+=” “;

blank+=”|”;

//Выводим массив на экран

for(int i=0;i<a.length;i++)

{

//Выводим на экран имя массива если текущий номер строки равен

//номеру строки в которой должно находиться имя массива

if(i==num_name)System.out.print(name+”=|”);

else System.out.print(blank);

//Выводим непосредственно сами элементы строки

for(int j=0;j<a[i].length;j++)

{

System.out.print(a[i][j]);

// Если это не последний элемент, то ставим запятую, в противном

// случае вертикальную черту и переходим на следующую строчку

if(i!=m.length-1)System.out.print(“,”);

else System.out.println(“|”);

}

}

}

// В противном случае выводим слово «null»

else

{

System.out.print(name+”{null}“);

}

// Закрываем скобочку и переводим курсор на другую строчку

System.out.println(“}”);

}

}

Соседние файлы в папке СПО