30. Проверки
Теория
с клавиатуры вводится натуральное число n требуется создать массив длины n и заполнить его элементами от n до 1.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[] = new int[n];
for(int i=0; i<n; i++){
arr[i] = n-i+1;
}
}
}
Для чтения всех элементов массива создана специальная конструкция for-each. Дословно можно перемести как «для каждого».
Работает эта конструкция следующим образом: по очереди во временную переменную копируются один за другим элементы массива и обрабатываются. При этом, что самое важное, нам не надо знать длину массива и обращаться к каждому элементу по индексу.
Попробуем при помощи такой конструкции решить задачу: пусть массив уже задан, требуется вывести сумму его элементов.
for (int a : arr) {
sum += a;
}
System.out.println(sum);
Чтобы использовать for-each конструкцию, надо в скобках указать тип массива, потом имя временной переменной, потом «:», потом имя массива. Каждое выполнение тела цикла производится с новым значением переменной а, равным соответствующему элементу массива.
Теперь возникает вопрос: а что если уже после инициализации массиву присвоить значение второго массива?
int [] arr = {1,2,3,4,5};
int [] arr2 = {6,7,8,9,10};
arr = arr2;
После присвоения arr = arr2 никакого копирования элементов, конечно, не произойдёт, копироваться будет только адрес оперативной памяти, где лежат переменные массива. Поэтому после такого присвоения arr и arr2 будут указывать на одну и ту же структуру данных, а та структура, на которую указывал arr автоматически удалится.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int [] arr = {1,2,3,4,5};
int [] arr2 = {6,7,8,9,10};
arr = arr2;
for(int a: arr){
System.out.print(a+" ");
}
arr2[0] = 0;
System.out.println();
for(int a: arr){
System.out.print(a+" ");
}
}
}
Вывод в консоль будет следующий:
6 7 8 9 10
0 7 8 9 10
Рассмотрим задачу
Дан массив целых чисел, нужно проверить, все ли его числа положительны.
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5, 6, 2, 1};
// логическая переменная, которая отвечает на вопрос,
// все ли числа в массиве положительные
boolean f = true;
// в цикле n раз считываем соответствующие элементы
for (int i = 0; i < arr.length; i++) {
// если i-ый элемент отрицательный
if (arr[i] <= 0)
// меняем ответ на "нет"
f = false;
}
System.out.println(f ? "Да" : "Нет");
}
}
На консоль будет выведено:
НЕТ
Задание
Во всех задачах нужно выполнить ту или иную проверку.
Требуется вывести только ДА
или НЕТ
.
Массив arr
уже объявлен, вам нужно написать только команды,
обрабатывающие его значения, т.е. только часть тела метода main()
.
Например, если вся программа имеет такой код:
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5, 6, 2, 1};
// логическая переменная, которая отвечает на вопрос,
// все ли числа в массиве положительные
boolean f = true;
// в цикле n раз считываем соответствующие элементы
for (int i = 0; i < arr.length; i++) {
// если i-ый элемент отрицательный
if (arr[i] <= 0){
// меняем ответ на "нет"
f = false;
// прерываем обработку (цикл)
break;
}
}
System.out.println(f ? "Да" : "Нет");
}
}
то в систему тестирования необходимо отправить только
// логическая переменная, которая отвечает на вопрос,
// все ли числа в массиве положительные
boolean f = true;
// в цикле n раз считываем соответствующие элементы
for (int i = 0; i < arr.length; i++) {
// если i-ый элемент отрицательный
if (arr[i] <= 0){
// меняем ответ на "нет"
f = false;
// прерываем обработку (цикл)
break;
}
}
System.out.println(f ? "Да" : "Нет");
- Проверить, что в массиве все элементы положительны
- Проверить, что в массиве все элементы не кратные трем и больше нуля.
- Проверить, образуют ли его элементы геометрическую прогрессию.
- Все ли элементы массива равны друг другу.
- Проверить, что массив упорядочен строго по возрастанию (каждый элемент массива больше своего левого соседа).
- Верно ли, что на всех четных позициях массива находятся четные числа, а на всех нечетных - нечетные. В этой задаче позиции элементов считать пронумерованными от . То есть, элемент массива с индексом - первый элемент массива.
- Верно ли, что массив "пилообразный" (каждый элемент массива, кроме первого и последнего, либо больше обоих своих соседей, либо меньше обоих своих соседей)