русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Исключение сохранения массива


Дата добавления: 2015-07-09; просмотров: 1015; Нарушение авторских прав


Если v переменная-массив имеет тип A[ ], где A - ссылочный тип, тогда v может содержать ссылку для реализации любого типа-массива B[ ], если разрешаетсяB присваиватьА.

Таким образом, пример:

class Point { int x, y; }

class ColoredPoint extends Point { int color; }

class Test {

public static void main(String[] args) {

ColoredPoint[] cpa = new ColoredPoint[10];

Point[] pa = cpa;

System.out.println(pa[1] == null);

try {

pa[0] = new Point();

} catch (ArrayStoreException e) {

System.out.println(e);

}

}

}

выводит следующее:

 

true

java.lang.ArrayStoreException

Здесь переменная pa имеет тип Point[], и переменная cpa имеет его ссылочное значение для объекта типа ColoredPoint[]. ColoredPoint может присваиваться Point; поэтому значение cpa может быть присвоено pa.

Например, ссылка на этот массив pa, при проверке является ли pa [1]- null, не будет заканчиваться ошибкой времени выполнения. Это происходит потому, что элемент массива типа ColoredPoint[] - есть ColoredPoint, а ColoredPoint может рассматриваться как Point, поскольку Point - это суперкласс ColoredPoint.

С другой стороны, присваивание массиву pa может заканчиваться ошибкой во время выполнения. Во время компиляции, присваивание элементу pa проверяется, чтобы удостовериться в том, что присвоенное значение - Point. Но когда pa содержит ссылку на массив типа ColoredPoint присваивание допустимо, только если тип присвоенного значения во время выполнения - тип ColoredPoint.

Во время выполнения Ява контролирует такую ситуацию, чтобы гарантировать что присваивание допустимо; если это не так, то генерируется ArrayStoreException . Более формально: присваивание элементу массива, чей тип - A[ ], где A- тип ссылки, проверяется во время выполнения, чтобы гарантировать что присвоенное значение может предназначаться для фактического типа элементов массива, где фактическим типом элементов может быть любой ссылочный тип, который можно присвоить к A.




 


Текст программы.

public class MaxArr {

public static void main(String[] args) throws Exception {

int n, i, a[];

n = Xterm.inputInt("Введите длину массива n -> ");

a = new int[n];

for (i=0; i<n; i++)

a[i] = Xterm.inputInt("Введите a[" + i + "] -> ");

int max = a[0];

for (i=1; i<n; i++)

if (a[i] > max)

max = a[i];

Xterm.println("Максимальный элемент массива = " + max);

}

}

В заключение рассмотрим задачу, включающую дополнительное требование на структуру программы.



Текст программы.

public class NumMaxArr {

public static void main(String[] args) throws Exception {

int n, i, a[];

n = Xterm.inputInt("Введите длину массива n -> ");

a = new int[n];

int max = Integer.MIN_VALUE;

int nMax = 0;

for (i=0; i<n; i++) {

a[i] = Xterm.inputInt("Введите a[" + i + "] -> ");

if (a[i] > max) {

max = a[i];

nMax = 1;

} else if (a[i] == max)

nMax += 1;

}

Xterm.println("Количество макс. элементов = " + nMax);

}

}

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

Можно заметить, что при решении этой задачи массив по-существу не используется. Если в этой программе удалить описание массива a, заменив его на описание целой переменной a, и произвести замену всех вхождений выражения a[i] на a, то программа останется работающей.

Задача сортировки является классической задачей на массивы.


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


Текст программы.

public class Sort {

private static void sort(int[] a, int n) {

int i, j, t;

for (i=0; i<n-1; i+=1)

for (j=n-1; j>i; j-=1)

if (a[j] < a[j-1]) {

t=a[j]; a[j]=a[j-1]; a[j-1]=t;

}

}

public static void main(String[] args) throws Exception {

int n, i, a[];

n = Xterm.inputInt("Введите длину массива n -> ");

a = new int[n];

for (i=0; i<n; i++)

a[i] = Xterm.inputInt("Введите a[" + i + "] -> ");

 

Xterm.print("Исходный массив\n");

for (i=0; i<n; i++)

Xterm.print(" " + a[i]);

Xterm.print("\n");

 

sort(a, n);

Xterm.print("Отсортированный массив\n");

for (i=0; i<n; i++)

Xterm.print(" " + a[i]);

Xterm.print("\n");

}

}

Задачи

1. Создайте массив из всех чётных чисел от 2 до 20 и выведите элементы массива на экран сначала в строку, отделяя один элемент от другого пробелом, а затем в столбик (отделяя один элемент от другого началом новой строки). Перед созданием массива подумайте, какого он будет размера.

2 4 6 … 18 20
2
4
6

20

2. Создайте массив из всех нечётных чисел от 1 до 99, выведите его на экран в строку, а затем этот же массив выведите на экран тоже в строку, но в обратном порядке (99 97 95 93 … 7 5 3 1).

3. Создайте массив из 15 случайных целых чисел из отрезка [0;9]. Выведите массив на экран. Подсчитайте сколько в массиве чётных элементов и выведете это количество на экран на отдельной строке.

4. Создайте массив из 8 случайных целых чисел из отрезка [1;10]. Выведите массив на экран в строку. Замените каждый элемент с нечётным индексом на ноль. Снова выведете массив на экран на отдельной строке.

5. Создайте 2 массива из 5 случайных целых чисел из отрезка [0;5] каждый, выведите массивы на экран в двух отдельных строках. Посчитайте среднее арифметическое элементов каждого массива и сообщите, для какого из массивов это значение оказалось больше (либо сообщите, что их средние арифметические равны).

6. Создайте массив из 4 случайных целых чисел из отрезка [10;99], выведите его на экран в строку. Определить и вывести на экран сообщение о том, является ли массив строго возрастающей последовательностью.

7. Создайте массив из 20-ти первых чисел Фибоначчи и выведите его на экран. Напоминаем, что первый и второй члены последовательности равны единицам, а каждый следующий — сумме двух предыдущих.

8. Создайте массив из 12 случайных целых чисел из отрезка [-15;15]. Определите какой элемент является в этом массиве максимальным и сообщите индекс его последнего вхождения в массив.

9. Создайте два массива из 10 целых случайных чисел из отрезка [1;9] и третий массив из 10 действительных чисел. Каждый элемент с i-ым индексом третьего массива должен равняться отношению элемента из первого массива с i-ым индексом к элементу из второго массива с i-ым индексом. Вывести все три массива на экран (каждый на отдельной строке), затем вывести количество целых элементов в третьем массиве.

10. Создайте массив из 11 случайных целых чисел из отрезка [-1;1], выведите массив на экран в строку. Определите какой элемент встречается в массиве чаще всего и выведите об этом сообщение на экран. Если два каких-то элемента встречаются одинаковое количество раз, то не выводите ничего.

11. Пользователь должен указать с клавиатуры чётное положительное число, а программа должна создать массив указанного размера из случайных целых чисел из [-5;5] и вывести его на экран в строку. После этого программа должна определить и сообщить пользователю о том, сумма модулей какой половины массива больше: левой или правой, либо сообщить, что эти суммы модулей равны. Если пользователь введёт неподходящее число, то программа должна требовать повторного ввода до тех пор, пока не будет указано корректное значение.

12. Программа должна создать массив из 12 случайных целых чисел из отрезка [-10;10] таким образом, чтобы отрицательных и положительных элементов там было поровну и не было нулей. При этом порядок следования элементов должен быть случаен (т. е. не подходит вариант, когда в массиве постоянно выпадает сначала 6 положительных, а потом 6 отрицательных чисел или же когда элементы постоянно чередуются через один и пр.). Вывести полученный массив на экран.

13. Пользователь вводит с клавиатуры натуральное число большее 3, которое сохраняется в переменную n. Если пользователь ввёл не подходящее число, то программа должна просить пользователя повторить ввод. Создать массив из n случайных целых чисел из отрезка [0;n] и вывести его на экран. Создать второй массив только из чётных элементов первого массива, если они там есть, и вывести его на экран.

 



<== предыдущая лекция | следующая лекция ==>
Члены массива | Массивы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.13 сек.