ДЗ на повторение: /* Задача по алгоритмам. Есть массив чисел, в котором все числа дублируются, кроме одного. Найдите число, которое не имеет дубликатов в массиве. Пример ввода: {1, 2, 3, 3, 4, 5, 7, 5, 6, 2, 4, 7, 6} Пример вывода: 1 */ /* Создать массив на 5 чисел. Заполнить его числами с клавиатуры. Найти максимальное и минимальное числа в массиве. Вывести на экран максимальное и минимальное числа через пробел. */
@@cloudname3666 Ошибку выдает из за того, что у тебя на последнем элементе программа пробует взять array[i + 1], переменная i, в этот момент, у тебя и так смотрит на последний элемент, соответственно - i+1 будет уже смотреть на индекс, которого не существует и у тебя будет выдавать IndexOutOfBoundException - который и говорит, что ты пытаешься обратиться по индексу, которого не существует. Для того, что бы избежать этой ошибки тебе надо в условии цикла сделать i < array.length - 1 тогда array[i + 1] в последней итерации не будет выходить за рамки допустимых индексов.
@@cloudname3666 я сначала примерно как ты сделал, но это не работало, в случае если была одна 1 - вывод был 0. Не совсем разобрался, почему так, поэтому нагуглил очень простое и понятное решение через XOR в одну строчку) В этом решении XOR сравнивает переменную 'arr' (которая изначально 0) с элементом массива в каждой итерации, и если они различаются, то записывает этот элемент в 'arr'. imgur.com/a/moMQw0f и второе, если кто-то хочет порассматривать чужой код: imgur.com/a/zYDn9Lg
1-е задание. Нельзя ли упростить мой код: package com.company.DZ.dz6; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { public static void main(String[] args) throws IOException { int[] mas = new int[9]; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); for (int i = 0; i < mas.length; i++) { String s = reader.readLine(); mas[i] = Integer.parseInt(s); } Arrays.sort(mas); for (int i = 0; i < mas.length; i++) { for (int j = i+1; j < mas.length; j++) { if (mas[i] == mas[j]) { i++;break; } System.out.println(mas[i]);break; } } if (mas[7]!=mas[8]){ System.out.println(mas[8]); } } }
Конечно можно, вложенный цикл тебе здесь не нужен, попробуй избавиться от него. Это вообще надо убрать: if (mas[7]!=mas[8]){ System.out.println(mas[8]); } Почему ты уверен, что у тебя будет 7 и 8 индекс в массиве? Если я создам массив на 3 элемента, например, у тебя вылетит ошибка. Программа должна работать универсально для массива любого размера, будь там 10 элементов, один или вообще ноль.
package com.company.DZ.dz6; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Main { public static void main(String[] args) throws IOException { int[] mas = new int[9]; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); for (int i = 0; i < mas.length; i++) { String s = reader.readLine(); mas[i] = Integer.parseInt(s); } Arrays.sort(mas); for (int i = 0; i < mas.length; i++) { if (mas[i] != mas[i+1]) { i++; continue; }System.out.println(mas[i]); } } } Если так , то ошибка. Если добавляю -1 к mas.length - не доходит до sout.
ДЗ на повторение:
/*
Задача по алгоритмам.
Есть массив чисел, в котором все числа дублируются, кроме одного. Найдите число, которое не имеет дубликатов в массиве.
Пример ввода:
{1, 2, 3, 3, 4, 5,
7, 5, 6, 2, 4, 7, 6}
Пример вывода:
1
*/
/*
Создать массив на 5 чисел. Заполнить его числами с клавиатуры. Найти максимальное и минимальное числа в массиве.
Вывести на экран максимальное и минимальное числа через пробел.
*/
imgur.com/a/EZ3d9oJ
P.S Как то я намудрил с 1 заданием, если не повторяющееся число = последнее, то выдает ошибку
@@cloudname3666 Ошибку выдает из за того, что у тебя на последнем элементе программа пробует взять array[i + 1], переменная i, в этот момент, у тебя и так смотрит на последний элемент, соответственно - i+1 будет уже смотреть на индекс, которого не существует и у тебя будет выдавать IndexOutOfBoundException - который и говорит, что ты пытаешься обратиться по индексу, которого не существует.
Для того, что бы избежать этой ошибки тебе надо в условии цикла сделать i < array.length - 1
тогда array[i + 1] в последней итерации не будет выходить за рамки допустимых индексов.
так у тебя не будет выдавать ошибку, но кейс с последним уникальным элементом тоже работать не будет, попробуй сам исправить так, что бы заработало.
@@cloudname3666 я сначала примерно как ты сделал, но это не работало, в случае если была одна 1 - вывод был 0. Не совсем разобрался, почему так, поэтому нагуглил очень простое и понятное решение через XOR в одну строчку)
В этом решении XOR сравнивает переменную 'arr' (которая изначально 0) с элементом массива в каждой итерации, и если они различаются, то записывает этот элемент в 'arr'.
imgur.com/a/moMQw0f
и второе, если кто-то хочет порассматривать чужой код: imgur.com/a/zYDn9Lg
Без сортировки первое задание paste.ubuntu.com/p/DdVqzNb7Wq/
Но работает только если не больше одного дубликата на число.
Не тот код
а где тот?)
1-е задание. Нельзя ли упростить мой код:
package com.company.DZ.dz6;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
int[] mas = new int[9];
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < mas.length; i++) {
String s = reader.readLine();
mas[i] = Integer.parseInt(s);
}
Arrays.sort(mas);
for (int i = 0; i < mas.length; i++) {
for (int j = i+1; j < mas.length; j++) {
if (mas[i] == mas[j]) { i++;break; }
System.out.println(mas[i]);break;
}
}
if (mas[7]!=mas[8]){
System.out.println(mas[8]);
}
}
}
Конечно можно, вложенный цикл тебе здесь не нужен, попробуй избавиться от него.
Это вообще надо убрать:
if (mas[7]!=mas[8]){
System.out.println(mas[8]);
}
Почему ты уверен, что у тебя будет 7 и 8 индекс в массиве? Если я создам массив на 3 элемента, например, у тебя вылетит ошибка.
Программа должна работать универсально для массива любого размера, будь там 10 элементов, один или вообще ноль.
package com.company.DZ.dz6;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
int[] mas = new int[9];
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < mas.length; i++) {
String s = reader.readLine();
mas[i] = Integer.parseInt(s);
}
Arrays.sort(mas);
for (int i = 0; i < mas.length; i++) {
if (mas[i] != mas[i+1]) { i++;
continue;
}System.out.println(mas[i]);
}
}
}
Если так , то ошибка. Если добавляю -1 к mas.length - не доходит до sout.
Вместо != ==