Одномерные массивы.

В общем смысле одномерный массив в языке Java– это класс, хранящий область памяти и количество элементов заданного типа. Элементами массива могут иметь как базовые типы, то есть типы, зарезервированные в языке Java, так и типы (объекты) созданные пользователем.

Объявление переменной представляющей сбой массив имеет следующую форму записи:

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

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

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

int a[];

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

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

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

int a[]=null;

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

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

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

a=new int[10];

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

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

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

int a[]=new int[10];

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

имя переменной[номер элемента]=значение

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

a[4]=25;

Переменную для хранения количества элементов массива определять отдельно не нужно, для этого у объекта a есть внутренняя переменная length, которая хранит количество элементов для которых выделена память.

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

import java.io.IOException;

import java.io.InputStreamReader;

import java.lang.NumbericFormatReader;

import java.lang.Double;

import java.lang.Integer

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

Class m_double_array_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_n() {

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

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

int a = 0;

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

try {

a=Integer.valueOf(read_str(“Input n”)).intValue();

}

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

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

catch (NumbericFormatException e){

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

a=0;

}

return a;

}

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

public double [] make_array(int n)

{

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

// количество элементов массива, если оно рано 0

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

if(n==0)

{

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

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

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

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

{

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

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

if(n==-1)return null;

}

}

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

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

double m[]=new double[n];

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

return m;
}

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

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 n)

{

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

double m[]=null;

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

m=make_array(n);

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

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

if(m==null)return null;

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

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

{

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

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

}

return m;

}

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

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

public double[] get_array (int n)

{

return get_array_priv(n);

}

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

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

public double[] get_array ()

{

return get_array_priv(0);

}

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

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

{

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

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

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

if(m!=null)

{

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

{

System.out.print(m[i]);

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

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

}

}

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

else

{

System.out.print(“null”);

}

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

System.out.println(“}”);

}

}

 

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

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

// массива

class m_double_array extends m_double_array_io {

// Объявляем переменную типа массив вещественных

// чисел

double m_array[]=null;

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

public m_double_array(){

}

// определяем конструктор класса создающий массив

public m_double_array(int n){

m_array=make_array(n);

}

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

// для присвоения значений переменной определенной

// внутри класса

public double[] make_array(int n)

{

// Обращаемся к базовому классу для создания

// массива

m_array=super.make_array(n);

return m_array;

}

public double[] get_array (int n)

{

// Обращаемся к базовому классу для чтения

// массива

m_array=super.get_array(n);

return m_array;

}

public double[] get_array ()

{

// Обращаемся к базовому классу для чтения

// массива

m_array=super.get_array();

return m_array;

}

public void put_array(String name)

{

// Обращаемся к базовому классу для вывода

// массива

super.put_array(m_array,name);

}

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

// самого массива

public double[] get_m_array()

{

return m_array;

}

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

public int get_array_length()

{

if(m_array==null)return 0;

return m_array.length;

}

// Добавит Функцию поиска максимального элемента

public double find_max()

{

// Проверяем массив на существование

// Если он отцутствует возвращаем “0”

if(m_array==null)return 0;

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

// значению максимального, для затравки

double max= m_array [0];

// Используем для определения размера массива

// свою функцию, для исключения проверки на существование

// объекта

for(int i=1;i<get_array_length();i++)

{

if(array[i]>max)max=array[i];

}

return max;

}

// Функцию поиска минимального элемента

public double find_min()

{

// Проверяем массив на существование

// Если он отцутствует возвращаем “0”

if(m_array==null)return 0;

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

//значению минимального, для затравки

double min=m_array[0];

for (int i=1;i<get_array_length();i++)

{

if(array[i]<min)min=array[i];

}

return min;

}

// Функцию вычисления суммы элементов массива

public double calc_sum()

{

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

//значению минимального, для затравки

double sum=0;

for (int i=0;i<get_array_length();i++)

{

sum+=array[i];

}

return sum;

}

// Функцию вычисления суммы четных элементов массива

public double calc_sum_2()

{

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

//значению минимального, для затравки

double sum=0;

for (int i=0;i<get_array_length();i+=2)

{

sum+=array[i];

}

return sum;

}

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

// обработки одномерного массива

}

 

 

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

Двумерный массив как и одномерный в языке 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(“}”);

}

}

 

 








Дата добавления: 2016-01-03; просмотров: 867;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.149 сек.