Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

methodichkaA5

.pdf
Скачиваний:
17
Добавлен:
02.02.2015
Размер:
801.83 Кб
Скачать

case 1: return "один "; case 2: return "два "; case 3: return "три "; case 4: return "четыре "; case 5: return "пять "; case 6: return "шесть "; case 7: return "семь "; case 8: return "восемь "; case 9: return "девять "; default: return " ";

}

}

Пример.

Программа калькулятор 2.

switch (oper) { case '+': z=x+y; break; case '-':

z=x-y; break; case '*': z=x*y; break; case '/': z=x/y; break;

}

2.4. Циклы

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

Циклы бывают двух видов: цикл со счетчиком for и цикл с проверкой условия while. Оператор while используется для задавания цикла с проверкой некоторого условия нахождения в цикле. Если условие перестает

21

выполняться, то цикл заканчивается. Оператор while в свою очередь делится на две подгруппы. Оператор while с предусловием и постусловием.

В общем виде оператор while с предусловием имеет следующий вид: while(условие нахождения в цикле){

Оператор 1 Оператор 2

……………

};

ложно

П

Проверить УСЛОВИЕ

О

 

В

истинно

Т

 

О

 

Р

 

ОПЕРАТОР

И

 

Т

 

 

Ь

 

 

 

 

продолжение

 

 

Рисунок 5 – Блок-схема оператораwhile с предусловием

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

выполняются все те операторы, которые заключены в теле цикла. Затем компилятор опять возвращается на проверку условия. Если оно выполнилось,

то выполняется следующий шаг цикла (т.е. опять выполняются те же операторы) и т.д. В случае, если условие не выполняется, то цикл заканчивается, и компилятор начинает выполнение операторов, следующих за телом цикла.

22

Пример.

Требуется вывести на экран положительные числа до 9.

public static void main(String[] args) { int i=0;

System.out.println(“Начало программы”); System.out.println(“Операторы до цикла”); while(i<=9){

System.out.print(i);

i++;

}; System.out.println(“ ”);

System.out.println(“Операторы после цикла”);

System.out.println(“Конец программы”);

}

Результат.

Начало программы

Операторы до цикла

0123456789

Операторы после цикла

Конец программы

Работа программы начинается с того, что объявляется переменная i и в нее записывается значение 0, затем выводится надпись “Операторы до цикла”.

Затем в операторе while происходит проверка значения переменной i. Т.к. i

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

где на экран выдается значение переменной, т.е. на экран выдается «0». Затем значение переменной i увеличивается на единицу (т.е. теперь i равно «1»).

Первый шаг закончился, и компилятор возвращается на проверку условия.

Т.к. i все еще меньше «9», попадаем опять в тело цикла. Снова выводим на экран значение переменной i (i равно «1»). Опять происходит увеличение i на единицу. Действия повторяются до тех пор, пока во время проверки условия

(т.е. сравнивания переменной i с числом «9») не будет обнаружено, что значение i равняется «9». Это значит, что условие не выполняется, и

компилятор в тело цикла не войдет, а продолжит выполнение операторов,

следующих за циклом.

23

Таким образом, понятно, что в задачи одного шага цикла входит:

печатать значение переменной i и увеличивать ее значение на единицу. Шаги выполняются до тех пор, пока значение i не достигнет девяти.

Оператор while с постусловием, (иначе он называется do while) имеет следующий вид

do{

Оператор 1 Оператор 2 Оператор 3

……………

……………

Оператор N

}while(условие нахождения в цикле);

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

П

 

 

О

 

 

В

 

ОПЕРАТОР

Т

 

 

 

О

 

 

 

 

Р

 

 

И

истинно

Т

 

 

ЬПроверить УСЛОВИЕ

ложно

продолжение

Рисунок 6 – Блок-схема оператораdo while с постусловием

24

Оператор for задает цикл со счетчиком. Он используется только в тех случаях, когда количество повторений известно заранее. Для выполнения цикла требуется задать переменную-счетчик целого типа, которая будет отвечать за количество повторений. Необходимо задать ее начальное и конечное значение, а также ее шаг (прирост или дельта) за каждое повторение цикла (дельта). Оператор for имеет следующий вид.

for(int i=S; i<E; i++){

Оператор 1 Оператор 2

……………

}

Здесь for – ключевое слово, обозначающее начало цикла. Запись int i=S значит, что объявляется переменная целого типа, и ей присваивается начальное значение, например S (вместо S может быть подставлено любое число). Далее указывается конечное значение переменной i (до какого значения i надо выполнять повторения) – i<E. И, наконец, i++ значит, на какую величину будет изменяться переменная i за каждое повторение цикла.

Пример.

Программа должна вывести в столбик числа от 1 до 10. Программу можно написать двумя способами. Первый способ без использования циклов, второй с использованием циклов.

public static void main(String[] args) {

public static void main(String[] args) {

System.out.println(“1”);

for(int i=1;i<=10;i++){

System.out.println(“2”);

System.out.println(i);

System.out.println(“3”);

}

System.out.println(“4”);

}

System.out.println(“5”);

 

System.out.println(“6”);

 

System.out.println(“7”);

 

System.out.println(“8”);

 

System.out.println(“9”);

 

System.out.println(“10”);

 

}

 

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

25

дописывать около миллиона строк программного кода, а во втором примере количество строк текста программы осталось бы неизменным, изменилось бы только 10 на 1000000 при указании конечного значения переменной i.

Смысл второго примера состоит в том, что повторяющийся оператор System.out.println заключается в цикл с переменной i в качестве счетчика. Указывается начальное значение переменной i=1. Указывается величина, на которую будет увеличиваться переменная i за каждое повторение цикла, i++ – значит, что увеличение будет производиться на единицу. Устанавливается значение предела, до которого будет выполняться цикл. В примере указано, что i<=10, это значит, что i, увеличиваясь за каждый шаг на единицу, достигнет значения 10. На каждом повторении цикла происходит выполнение оператора System.out.println, который выводит на экран значение переменной i. Т.к. повторений 10, то количество выполнений в программе оператора System.out.println будет тоже 10, причем при каждом его последующем вызове значение i будет больше на единицу, чем при предыдущем.

3.Массивы

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

Массив - это последовательность объектов, либо примитивных типов данных, которые имеют одинаковый тип и упакованы вместе под одним именем идентификатора. Другими словами, массив – это какая-то переменная, которая содержит в себе несколько переменных одинакового типа. Они, в свою очередь, являются ячейками массива и имеют порядковый номер. В java нумерация ячеек массива начинается с нуля. Графически массив можно представить следующим образом.

0 1 2 3 4 … N

Прежде, чем использовать переменную типа массив, ее следует объявить и инициализировать. Для определения массива указывается имя типа, за которым следуют пустые квадратные скобки.

int[] a;

Можно также поместить квадратные скобки после идентификатора, что имеет тот же самый смысл.

int a[];

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

26

определяется только ссылка на массив, но здесь не резервируется место в памяти под массив. Создание хранилища для массива описывается выражением инициализации. Для массивов, инициализация может быть выполнена в любом месте кода.

a = new int[10];

Здесь компилятору сообщается, что переменной а выделяется память под 10 элементов целого типа. Т.е. массив а будет иметь 10 ячеек (или состоять из десяти переменных), в каждую из которых может быть записано целое значение.

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

a[0]=5;

a[1]=9;

a[2]=a[0]+a[1];

System.out.println(a[0]+” ”+a[1]+” ”a[2]);

Здесь в ячейку под номером «0» (самая первая ячейка массива) записывается число «5». В первую записывается «9». Во вторую записывается сумма значений нулевой и первой. Затем выводятся на консоль значения всех трех ячеек.

При инициализации массива можно задавать значения ячеек. Для этого после объявления массива в фигурных скобках через запятую указываются значения. Количество значений будет показывать размер массива.

int[] marks = {2, 3, 4, 5};

String[] teams = {”Metallist” , ”Shakhtar” , “Dinamo” , “Dnipro”};

Заданы массивы, состоящие из четырех элементов. Первый массив – массив целых чисел. Второй – массив строк.

Если выполнить команду

System.out.println(teams[1]+ “ 1:1 ” + teams[2]);

System.out.println(teams[3]+ “ 0:3 ” + teams[0]); ,

то на экран будет выдана надпись

Shakhtar 1:1 Dinamo

Dnipro 0:3 Metalist.

У каждого созданного массива помимо хранилища данных в памяти выделяется место под специальные свойства и методы. Например, с

помощью свойства length можно узнать количество элементов массива.

27

Пример.

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

package arrTest; import java.lang.*; public class Tst1 {

public static void main(String[] argv) {

int[] a = new int[10]; //объявление массива целых чисел

//заполнение массива случайными числами for(int i=0;i<a.length;i++){

a[i] = (int)Math.round(Math.random()*100);

}

//вывод массива на экран for (int i = 0; i < a.length; i++) {

System.out.println(a[i]);

}

}

}

Здесь, сначала объявляется массив целых чисел, который состоит из десяти элементов. Потом в цикле от 0 (int i=0) до количества элементов в массиве (i<a.length) выполняется цикл по i с шагом 1 (i++). Т.к. элементов в массиве – 10, то и количество шагов цикла будет 10. Причем на каждом шаге переменная i будет принимать значения 0,1,2,…,9, а ячейка a[i] будет иметь номер a[0], a[1], a[2], … a[9]. Таким образом, на каждой итерации цикла в массив, в ячейку под номером i будет записываться случайное число от 0 до 100 (a[i] =

(int)Math.round(Math.random()*100);)

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

Задается цикл, где переменная i изменяется от 0 до a.length с шагом 1. На каждом шаге цикла происходит обращение к одной ячейке массива, номер которой равен i. Эта ячейка выводится на экран. Всего выполняется a.length шагов цикла.

Пример.

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

package arrTest; import java.lang.*; public class Tst2 {

public static void main(String[] argv) {

int[] a = new int[100];

 

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

//заполнение массива случайными числами

 

28

a[i] = (int)Math.round(Math.random()*30)+20;

}

 

int sum=0;

//накопительная переменная

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

sum+=a[j];

//значение каждой ячейки добавляется к переменной sum

}

System.out.println("Сумма: "+sum);

System.out.println("Среднее значение: "+sum/(float)a.length);

}

}

Здесь, после инициализации массива и заполнения его случайными числами, создается накопительная переменная sum, которая перед проходом по всем элементам массива обнуляется. В следующем цикле по переменной j от 0 до a.length происходит обращение к каждой ячейке массива, значения которых на каждом шаге цикла прибавляется к переменной sum. Работа программы, выполняющей накопление значения для четырех шагов цикла, показана в таблице 9. В конечном счете, в переменной sum будет записана сумма всех ячеек массива.

Таблица 9 – Операция sum+=a[j];

по шагам

Шаг цикла (j)

Текущая ячейка

Значение переменной sum

на шаге цикла

 

 

 

 

 

 

 

 

Перед циклом

 

 

0

0

a[0]

 

0+a[0]

1

a[1]

 

0+a[0]+a[1]

2

a[2]

 

0+a[0]+a[1]+a[2]

3

a[3]

 

0+a[0]+a[1]+a[2]+a[3]

Для расчета среднего арифметического значений элементов массива, необходимо значение переменной sum разделить на длину массива a.length.

Пример.

Найти значение минимального элемента массива и указать номер ячейки.

package arrTest; import java.lang.*; public class Tst3 {

public static void main(String[] argv) { int[] a = new int[20];

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

a[i] = (int)Math.round(Math.random()*30)+20;

29

}

 

int minElem=a[0];

//для запоминания минимального значения

int minCell=0;

//для запоминания номера минимальной ячейки

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

 

if(a[j]<minElem){

//если появилась новая минимальная ячейка, то

minElem = a[j];

//запоминаем новый минимальный элемент

minCell=j;

//запоминаем номер новой минимальной ячейки

}

 

}

 

System.out.println("Ячейка: "+minCell);

System.out.println("Значение: "+minElem);

}

}

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

int minElem=a[0];

int minCell=0;

Затем в цикле от нуля до длины массива сравниваем значение minElem со значением каждой ячейки массива. Если значение ячейки a[j] будет меньше, чем значение minElem, то это значит, что необходимо запомнить новый минимальный элемент в minElem, затерев ее старое значение.

if(a[j]<minElem){

minElem = a[j];

minCell=j;

}

А в переменную minCell запомнить номер нового минимального элемента массива, а старый номер затереть.

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

Двумерный массив, также как и одномерный представляет собой переменную, которая состоит из множества ячеек, но имеет уже вид матрицы. Здесь номер ячейки задается двумя координатами, номером столбца и строки. Объявление массива происходит следующим образом: указывается тип данных, затем следует две пары квадратных скобок, затем имя переменной.

float [][] f;

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]