switch (c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
mInfoTextView.setText("Гласная");
break;
case 'y':
case 'w':
mInfoTextView.setText("Условная гласная");
break;
default:
mInfoTextView.setText("Согласная");
break;
}
}
Так как метод Random.nextInt(26) генерирует значение между 0 и 26, для получения символа нижнего регистра остаётся прибавить смещение 'a', при этом символ a автоматически преобразуется к типу int. Символы в секциях case также представляют собой целочисленные значения, используемые для сравнения.
Чтобы вывести переменную c в символьном виде, её необходимо преобразовать к типу char, иначе значение будет выведено в числовом виде.
В Java SE 7 появилась возможность использовать объект String в операторе switch. Возможно, это будет работать и на Android в будущем (Upd.: вроде уже работает):
public class StringSwitchDemo {
public static int getMonthNumber(String month) {
int monthNumber = 0;
if (month == null) {
return monthNumber;
}
switch (month.toLowerCase()) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march":
monthNumber = 3;
break;
case "april":
monthNumber = 4;
break;
case "may":
monthNumber = 5;
break;
case "june":
monthNumber = 6;
break;
case "july":
monthNumber = 7;
break;
case "august":
monthNumber = 8;
break;
case "september":
monthNumber = 9;
break;
case "october":
monthNumber = 10;
break;
case "november":
monthNumber = 11;
break;
case "december":
monthNumber = 12;
break;
default:
monthNumber = 0;
break;
}
return monthNumber;
}
public static void main(String[] args) {
String month = "August";
int returnedMonthNumber =
StringSwitchDemo.getMonthNumber(month);
if (returnedMonthNumber == 0) {
System.out.println("Invalid month");
} else {
System.out.println(returnedMonthNumber);
}
}
}
Допустимы вложенные операторы switch, но на практике я не сталкивался с таким кодом.
Запомните важные свойства оператора switch:
· Оператор switch отличается от оператора if тем, что может выполнять проверку только равенства, а оператор if может вычислять результат булева выражения любого типа.
· Две константы case в одном и том же операторе switch не могут иметь одинаковые значения
· Оператор switch эффективнее набора вложенных операторов if
Задания к работе
1. Случайное трехзначное число, оканчивающееся на 0. Вывести нечетное число.
2. Программа «Угадай число» с использованием только оператора ветвления.
3. Определить количество дней в году.
4. Проверка кратности числа.
5. Определение четверти на координатной плоскости.
6. Оператор IF в задаче выбора.
7. Найти среднее число из 5 чисел.
8. Вычислить значение переменной у по одной из двух ветвей:
9. В компьютер вводятся два числа. Если первое больше второго, то вычислить их сумму, иначе - произведение. После этого компьютер должен напечатать результат и текст ЗАДАЧА РЕШЕНА
10. Дракон каждый год отращивает по три головы, но после того, как ему исполнится 100 лет - только по две. Сколько голов и глаз у дракона, которому Nлет?
11. Дано целое число A. Проверить истинность высказывания: «Число A является положительным».
12. Человек вводит в компьютер число. Если оно находится в интервале от 28 до 30, то нужно напечатать текст ПОПАЛ, если оно больше или равно 30 - то ПЕРЕЛЕТ, если оно находится на отрезке от 0 до 28, то НЕДОЛЕТ, если число меньше нуля - НЕ БЕЙ ПО СВОИМ
Практическое занятие №9
Тема: Одномерные и двумерные массивы в PНР. Работа над ассоциативными массивами
Цель работы: определение массива, создавать массивы любой сложности непосредственно в теле программы (скрипта).
Указание к работе: существует два типа массивов, различающиеся по способу идентификации элементов, необходимо их показать на примерах.
Рано или поздно каждому программисту приходится сталкиваться с таким понятием как массив.
Массивом можно считать разновидность переменных, в котором храниться несколько значений.
Массив определяется при помощи конструкции array(), в круглых скобках которой указываются его значения:
<?php $arr = array('PHP', 'MySQL', 'Apache'); ?>
или
<?php $arr[] = "PHP"; $arr[] = "MySQL"; $arr[] = "Apache"; ?>
В C-подобных языках программирования, индекс массива традиционно начинается с 0.
Это означает, что если мы захотим вывести первое значение массива "PHP", нам потребуется обратиться к нулевому индексу:
<?php echo $arr[0]; // PHP ?>
Если требуется начать массив с другого индекса, например, с 1, то необходимо явно это указать в конструкцииarray():
<?php $arr = array(1 => "PHP", 2 => "MySQL", 3 => "Apache"); ?>
или
<?php $arr[1] = "PHP"; $arr[2] = "MySQL"; $arr[3] = "Apache"; ?>
Элементы массива можно использовать в двойных кавычках как обычные переменные, так код
<?php echo "$arr[1] $arr[2] $arr[3]"; ?>
или через цикл:
<?php for ($i = 1; $i <= 3; $i++) { echo $arr[$i]." "; } ?>
Следует заметить, что число элементов в массиве не обязательно знать заранее -- его можно вычислить при помощи функции count():
<?php for ($i = 1; $i <= count($arr); $i++) { echo $arr[$i]." "; } ?>
Выведет строку "PHP MySQL Apache".
В качестве индексов массива могут выступать не только числа, но и строки:
<?php $arr = array("first" => "PHP", "second" => "MySQL", "third" => "Apache"); ?>
или
<?php $arr["first"] = "PHP"; $arr["second"] = "MySQL"; $arr["third"] = "Apache"; ?>
В этом случае массив называется ассоциативным, а его индексы называются ключами. Для вывода элемента массива в строке кавычки (ни двойные, ни одинарные) указывать не следует:
<?php echo "$arr[first] $arr[second] $arr[third]"; ?>
Так как у ассоциативных массивов нет индексов, для обхода их введён специальный вид цикла -- foreach:
<?php foreach($arr as $key => $value) { echo "$key = $value <br />"; } ?>
В результате работы цикла будет выведено три строки
first = PHP second = MySQL third = Apache
Конструкция "$key =>", позволяющая получить доступ к ключу массива на каждом из циклов является не обязательно и может быть опущена:
<?php foreach($arr as $value) { echo "$value <br />"; } ?>
Ряд функций, также позволяют возвращать массивы, например, функция file(), которая читает файл и возвращает его содержимое в виде массива. Каждый элемент массива соответствует одной строке.
<?php $arr = file("text.txt"); for($i = 0; $i < count($arr); $i++) { echo $arr[$i]."<br />"; } ?>
Другой полезной функцией является функция explode(), которая позволяет разбить строку на несколько фрагментов, каждый из которых помещается в отдельный элемент массива:
<?php $str = "345|mail@mail.ru|http://www.softtime.ru|login|password"; $arr = explode("|",$str); for($i = 0; $i < count($arr); $i++) { echo $arr[$i]."<br />"; } ?>
Результат работы скрипта может выглядеть следующим образом:
345 mail@mail.ru http://www.softtime.ru login password
Существует и обратная функция -- implode(), которая объединяет, элементы массива в строку, используя для этого заданный разделитель:
<?php $arr[] = "345"; $arr[] = "mail@mail.ru"; $arr[] = "http://www.softtime.ru"; $arr[] = "login"; $arr[] = "password"; $str = implode("##",$arr); echo $str; //345##mail@mail.ru##http://www.softtime.ru##login##password ?>
Замечание. Вообще функций, которые потрошат строку превеликое множество, рассмотрение всех их выходят за рамки данной статьи.
Удалить отдельный элемент массива можно при помощи функции unset(), а проверить существование массива можно при помощи функции isset().
Определим массив из 10 элементов и уничтожим каждый чётный элемент.
<?php $arr = array(9, 8, 7, 6, 5, 4, 3, 2, 1, 0); unset($arr[0], $arr[2], $arr[4], $arr[6], $arr[8]); // Проверяем существуют ли элементы массива for($i = 0; $i < 10; $i++) { if(isset($arr[$i])) echo "Элемент $arr[$i] определён <br />"; else echo "Элемент $arr[$i] не определён <br />"; } ?>
Результатом работы скрипта из будут следующие строки
Элемент $arr[0] не определён
Элемент $arr[1] определён
Элемент $arr[2] не определён
Элемент $arr[3] определён
Элемент $arr[4] не определён
Элемент $arr[5] определён
Элемент $arr[6] не определён
Элемент $arr[7] определён
Элемент $arr[8] не определён
Элемент $arr[9] определён
При помощи функции unset() можно уничтожить весть массив сразу.
<?php $arr = array(9, 8, 7, 6, 5, 4, 3, 2, 1, 0); unset($arr); if(isset($arr)) echo "Массив определён"; else echo "Массив не определён"; ?>
До этого массивы выводились при помощи цикла, однако в PHP предусмотрена специальная функция для вывода дампа массива print_r(). Функция ориентирована на вывод в консольный поток, поэтому при выводе результатов в окно браузера лучше обрамить её тэгами <pre> и </pre>:
<?php $arr[] = "345"; $arr[] = "mail@mail.ru"; $arr[] = "http://www.softtime.ru"; $arr[] = "login"; $arr[] = "password"; echo "<pre>"; print_r($arr); echo "</pre>"; ?>
Результат работы скрипта выглядит следующим образом:
Array ( [0] => 345 [1] => mail@mail.ru [2] => http://www.softtime.ru [3] => login [4] => password )
Многомерные массивы
В качестве элементов массива могут выступать не только скалярные величины, но и сами массивы. В этом случае получаются так называемые многомерные массивы.
Пусть необходимо получить такую таблицу:
|
Имя |
Профессия |
Зарплата |
|
|
Вася |
Слесарь |
2500 |
|
|
Миша |
Строитель |
3000 |
|
|
Андрей |
Шофер |
2700 |
Для этого создадим двумерный массив:
<?php $arr = array( array(`Вася', `слесарь', 2500 ), array(`Миша','строитель', 3000), array(`Андрей', `шофер', 2700)); ?>
Теперь таблицу можно вывести при помощи следующего кода:
<?php for ($i = 0; $i < 3; $i++) { for ($j=0; $j <3; $j++) { echo ' | '.$arr[$i][$j]; } echo '<br />'; } ?>
Результат:
| Вася | слесарь | 2500 | Миша | строитель | 3000 | Андрей | шофер | 2700
Также можно использовать трехмерные, четырехмерные и т.п. массивы.
Операции над массивами (сборник рецептов)
1) Определения числа элементов в массиве count():
Создадим массив $name:
<?php $name = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx'); ?>
Чтобы определить число элементов в массиве можно поступить следующим образом:
<?php echo `Число элементов в массиве - '.count($name); ?>
Результат:
Число элементов в массиве - 8
2) Объединение массивов
a) Создадим два ассоциативных массива $a и $b:
<?php $a = array(“a” => ”aa”, “b” => “bb”); $b = array(“c” => ”cc”, “d” => “dd”); ?>
Пусть необходимо создать массив $c, которые будет содержать как элементы массива $a так и массива $b:
<?php $a = array("a"=>"aa", "x"=>"xx"); $b = array("c"=>"cc", "d"=>"dd"); $c = $a + $b; echo "<pre>"; print_r($c); echo "</pre>"; ?>
Результат:
Array ( [a] => aa [x] => xx [c] => cc [d] => dd )
b) Создадим два числовых массива $a и $b:
<?php $a = array(10,20); $b = array(100,200,300,400,500); ?>
Их уже не получится объединить при помощи конструкции $c = $a + $b;. Для их объединения потребуется воспользоваться функцией array_merge():
<?php $c = array_merge($a,$b); ?>
3) Сортировка массива
Воспользуемся массивом $name:
<?php $name = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx'); ?>
Пусть требуется отсортировать массив в алфавитном порядке, для этого можно воспользоваться следующим кодом:
<?php sort($name); echo "<pre>"; print_r($name); echo "</pre>"; ?>
Результат:
Array ( [0] => Boss [1] => Doctor [2] => Dragons [3] => Endless [4] => Lentin [5] => Lynx [6] => NAV [7] => SiLeNT )
Пусть необходимо из массива $name выбрать самый короткий элемент(у которого наименьшее количество символов), в этом случае можно воспользоваться кодом:
<?php $name = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx'); $min = strlen($name[0]); $nam = $name[0]; for ($i=1; $i < count($name); $i++) { $len = strlen($name[$i]); if ($len < $min) { $nam = $name[$i]; $min = strlen($nam); } } echo 'Наименьшая длина - '.$nam; ?>
4) Перемещение внутри массива
Создадим массив $num:
<?php $num = array(1,2,3,4,5,6,7,8,9,10); ?>
Пусть требуется отобразить элементы массива в обратном порядке, в этом случае можно воспользоваться кодом:
<?php $end = end($num); While ($end) { echo $end.' - '; $end = prev($num); } ?>
Результат:
10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1
Приведённый выше код можно модифицировать:
<?php $num = range(1,10); print_r (array_reverse($num)); ?>
Функция range(1,10) создает массив (1,2,3,4,5,6,7,8,9,10) со случайным расположением элементов. Функцияarray_reverse() принимает массив и располагает элементы в обратном порядке (10,9,8,7,6,5,4,3,2,1)
Функции next(), each() перемещают указатель на один элемент вперед. Функция reset() возвращает указатель на 1 элемент в массиве. Воспользуемся массивом $num:
<?php $num = array(1,2,3,4,5,6,7,8,9,10); ?>
Пусть необходимо вывести все элементы по порядку, и на последнем элементе массива вернуть указатель на первый элемент массива. Эту операцию можно осуществить при помощи следующего кода:
<?php $i=0; //Индекс 1 элемента while ($i < count($num)) { echo $num[$i].' '; $i++; //Проверка если $i равен числу элементов в массиве //тогда выводим последний элемент и возвращаем указатель if ($num[$i] == count($num)) { echo $num[$i]; reset ($num); echo '<br />'."Конец массива"; exit(); }}?>
Результат:
1 2 3 4 5 6 7 8 9 10 Конец массива
5) Перемешивание элементов в массиве shuffle()
<?php $a = array(43,'PHP',4,57,'Boss',90); shuffle($a); foreach ($a as $n) echo "$n "; ?>
6) Случайный элемент массива
Если имеется готовый массив, из которого необходимо вывести один случайный элемент, для этого необязательно перемешивать весь массив при помощи функции shuffle(), достаточно сгенерировать случайный индекс массива: