-
Notifications
You must be signed in to change notification settings - Fork 131
Expand file tree
/
Copy pathHW2Lesson.java
More file actions
198 lines (179 loc) · 7.29 KB
/
HW2Lesson.java
File metadata and controls
198 lines (179 loc) · 7.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/**
* Java. Level 1. Lesson 2. Example of homework
*
* @author Sergey Iryupin
* @version dated Sep 17, 2018
*/
import java.util.Arrays;
import java.util.Scanner;
class HW2Lesson {
public static void main(String[] args) {
// simple tasks (1..4)
invertArray();
System.out.println(Arrays.toString(fillArray()));
System.out.println(Arrays.toString(
changeArray(new int[]{1, 5, 3, 2, 11, 4, 5, 2, 4, 8, 9, 1})));
fillDiagonal(5);
// tasks of increased complexity (5..7)
// find min and max (5)
System.out.println(Arrays.toString(
findMinMax(new int[]{1, 5, 3, 2, 11, 4, 5, 2, 4, 8, 9, 1})));
// check balance (6)
int[][] test = {{1, 1, 1, 2, 1}, {2, 1, 1, 2, 1}, {10, 10}};
for (int i = 0; i < test.length; i++)
System.out.println(
Arrays.toString(test[i]) + " " + checkBalance(test[i]));
// shift array (7)
System.out.println(Arrays.toString(
shiftArray(new int[]{1, 2, 3, 4, 5}, 2)));
System.out.println(Arrays.toString(
shiftArray(new int[]{1, 2, 3, 4, 5}, -3)));
// console calculator (extra)
calcConsole();
}
/**
* 1. Задать целочисленный массив, состоящий из 0 и 1.
* Например: [1, 1, 0, 0, 1, 0, 1, 1, 0, 0]. С помощью цикла
* и условия заменить 0 на 1, 1 на 0
*/
static void invertArray() {
// init array directly
int[] array = {1, 1, 0, 0, 1, 0, 1, 1, 0, 0};
// init array using random()
//int[] array = new int[10];
//for (int i = 0; i < array.length; i++)
// array[i] = (int)(Math.random() + 0.5);
System.out.println(Arrays.toString(array));
// invert
for (int i = 0; i < array.length; i++)
array[i] = 1 - array[i];
//array[i] = array[i] ^ 1;
//array[i] = (array[i] == 1)? 0 : 1;
System.out.println(Arrays.toString(array));
}
/**
* 2. Задать пустой целочисленный массив размером 8.
* С помощью цикла заполнить его значениями 0 3 6 9 12 15 18 21
*/
static int[] fillArray() {
int[] array = new int[8];
for (int i = 0, j = 0; i < array.length; i++, j += 3)
array[i] = j;
return array;
}
/**
* 3. Задать массив [1, 5, 3, 2, 11, 4, 5, 2, 4, 8, 9, 1] пройти по нему
* циклом, и числа меньшие 6 умножить на 2
*/
static int[] changeArray(int[] array) {
for (int i = 0; i < array.length; i++)
if (array[i] < 6)
array[i] *= 2;
return array;
}
/**
* 4. Создать квадратный двумерный целочисленный массив (количество
* строк и столбцов одинаковое), и с помощью цикла(-ов) заполнить
* его диагональные элементы единицами
*/
static void fillDiagonal(int size) {
int[][] matrix = new int[size][size];
for (int i = 0; i < size; i++) {
matrix[i][i] = 1;
matrix[i][size - i - 1] = 1;
}
System.out.println(Arrays.deepToString(matrix));
for (int i = 0; i < size; i++)
System.out.println(Arrays.toString(matrix[i]));
}
/**
* 5. ** Задать одномерный массив и найти в нём минимальный
* и максимальный элементы
*/
static int[] findMinMax(int[] array) {
int[] minmax = new int[2];
minmax[0] = minmax[1] = array[0];
for (int i = 1; i < array.length; i++) {
if (minmax[0] > array[i])
minmax[0] = array[i];
if (minmax[1] < array[i])
minmax[1] = array[i];
}
return minmax;
}
/**
* 6. ** Написать метод, в который передается не пустой одномерный
* целочисленный массив, метод должен вернуть true если в массиве
* есть место, в котором сумма левой и правой части массива равны.
* Примеры:
* checkBalance([1, 1, 1, || 2, 1]) → true
* checkBalance([2, 1, 1, 2, 1]) → false
* checkBalance([10, || 10]) → true
* граница показана символами ||, эти символы в массив не входят
*/
static boolean checkBalance(int[] array) {
if (array == null || array.length < 2)
return false;
int sumArray = 0, sumLeft = 0;
for (int i : array)
sumArray += i;
if ((sumArray == 0) && (sumArray % 2 != 0)) // by DSerov
return false;
for (int i = 0; i < array.length - 1; i++) {
sumLeft += array[i];
if (sumLeft*2 == sumArray)
return true;
}
return false;
}
/**
* 7. **** Написать метод, которому на вход подается одномерный массив
* и число n (может быть положительным, или отрицательным), при этом
* метод должен сместить все элементы массива на n позиций.
* Для усложнения задачи нельзя пользоваться вспомогательными массивами
*/
static int[] shiftArray(int[] array, int shift) {
if (array == null || array.length < 2
|| shift == 0 || shift % array.length == 0)
return array;
shift = shift % array.length; // optimization of the number of shifts
if (shift < 0)
shift += array.length; // by Gusar Mikhail
for (int cnt = 0; cnt < shift; cnt++) {
int tmp = array[array.length - 1];
for (int i = array.length - 1; i > 0; i--)
array[i] = array[i - 1];
array[0] = tmp;
}
return array;
}
/**
* 8. ***** Написать простой консольный калькулятор
*/
static void calcConsole() {
Scanner read = new Scanner(System.in);
System.out.println("Enter separated by space: Integer [+|-|*|/] Integer");
int first = read.nextInt();
String operator = read.next();
int second = read.nextInt();
switch(operator) {
case "+":
System.out.println("= " + (first + second));
break;
case "-":
System.out.println("= " + (first - second));
break;
case "*":
System.out.println("= " + (first * second));
break;
case "/":
if (second != 0)
System.out.println("= " + (first / second));
else
System.out.println("Error: Division by zero");
break;
default:
System.out.println("Error: Undefined operation");
}
}
}