Даже при импорте java.util.Arrays пишет - надо создать два массива, но они же и создаются этим кодом и в них сразу копируется содержимое ячеек, или я что-то не правильно понял с методом Arrays.copyOf и Arrays.copyOfRange. Задачу решил стандартным методом но интересно почему не проходит этот код.
int[] tenFirst = Arrays.copyOf(twenty, 10);
int[] tenSecond = Arrays.copyOfRange(twenty, 10, 20);
Анатолий Анатольевич Мишенин
9 уровень
Почему закомментированный код не проходит проверку
Решен
Комментарии (29)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Roman
3 декабря 2019, 20:49
Можете полный код скинуть?
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 21:36
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int[] twenty = new int[20];
for(int i = 0;i < twenty.length;i++)
{twenty[i] = Integer.parseInt(reader.readLine());}
/*
int[] tenFirst = Arrays.copyOf(twenty, 10);
int[] tenSecond = Arrays.copyOfRange(twenty, 10, 20);
for (int i = 0;i < tenSecond.length;i++)
System.out.println(tenSecond[i]);
*/
int[] tenFirst = new int[10];
int[] tenSecond = new int[10];
for(int i = 0; i < tenFirst.length; i++){
tenFirst[i] = twenty[i];
}
for(int i = 0; i < tenSecond.length; i++){
tenSecond[i] = twenty[10+i];
}
for(int i = 0; i < tenSecond.length; i++){
System.out.println(tenSecond[i]);
}
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 21:37
то что закомментированно это же альтернативный вариант инициализации массива с одновременным копированием в него данных или я что-то не правильно понял этот метод ?
0
Ksenia Volkova Java Developer в DXC Master
3 декабря 2019, 21:44
Возможно, валидатор просто хотел увидеть создание двух чистых массивов, и если бы ты поставил перед Arrays.copy... те 2 строчки, которые идут после комментария, то задача бы была принята.
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 21:48
поставил не принимает, IDEA вообще отвергает данную операцию, можете проверить.
0
IceBergMaster
3 декабря 2019, 21:50
Брось код, где видно импорт
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 21:52
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
/*
Один большой массив и два маленьких
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int[] twenty = new int[20];
for(int i = 0;i < twenty.length;i++)
{twenty[i] = Integer.parseInt(reader.readLine());}
/*
int[] tenFirst = Arrays.copyOf(twenty, 10);
int[] tenSecond = Arrays.copyOfRange(twenty, 10, 20);
for (int i = 0;i < tenSecond.length;i++)
System.out.println(tenSecond[i]);
*/
int[] tenFirst = new int[10];
int[] tenSecond = new int[10];
for(int i = 0; i < tenFirst.length; i++){
tenFirst[i] = twenty[i];
}
for(int i = 0; i < tenSecond.length; i++){
tenSecond[i] = twenty[10+i];
}
for(int i = 0; i < tenSecond.length; i++){
System.out.println(tenSecond[i]);
}
}
}
0
IceBergMaster
3 декабря 2019, 21:53
Всё работает.
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 21:56
а вот так ?import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
/*
Один большой массив и два маленьких
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int[] twenty = new int[20];
for(int i = 0;i < twenty.length;i++)
{twenty[i] = Integer.parseInt(reader.readLine());}
int[] tenFirst = Arrays.copyOf(twenty, 10);
int[] tenSecond = Arrays.copyOfRange(twenty, 10, 20);
for (int i = 0;i < tenSecond.length;i++)
System.out.println(tenSecond[i]);
/*
int[] tenFirst = new int[10];
int[] tenSecond = new int[10];
for(int i = 0; i < tenFirst.length; i++){
tenFirst[i] = twenty[i];
}
for(int i = 0; i < tenSecond.length; i++){
tenSecond[i] = twenty[10+i];
}
for(int i = 0; i < tenSecond.length; i++){
System.out.println(tenSecond[i]);
*/
}
}
}
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 22:00
вот это int[] tenFirst = Arrays.copyOf(twenty, 10); создание массива на 10 ячеек с одновременным копированием в него содержимого первых 10 ячеек другого массива ? вроде я правильно понял лекцию, поэтому IDEA и не пропускает вот это int[] tenFirst = new int[10]; потому что получается бред. Что не так ?
0
IceBergMaster
3 декабря 2019, 22:00
Для начала нужно правильно закомментировать
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 22:02
пардон ошибся но сути вопроса это не изменило, не проходит проверку на стадии создания двух маленьких массивов
/*
int[] tenFirst = new int[10];
int[] tenSecond = new int[10];
for(int i = 0; i < tenFirst.length; i++){
tenFirst[i] = twenty[i];
}
for(int i = 0; i < tenSecond.length; i++){
tenSecond[i] = twenty[10+i];
}
*/
0
IceBergMaster
3 декабря 2019, 22:04
Так проблема в валидации, или компиляции?
Если компиляции, тогда скинь полный код, который выдаёт ошибку.
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 22:05
Проблема в валидации именно вот этого кода, при компиляции все работает почему валидатор вот это int[] tenFirst = Arrays.copyOf(twenty, 10);
int[] tenSecond = Arrays.copyOfRange(twenty, 10, 20);
for (int i = 0;i < tenSecond.length;i++)
System.out.println(tenSecond[i]);
не пропускает в чем проблема ?
0
IceBergMaster
3 декабря 2019, 22:08
Ну так это уже совсем другой вопрос, к IDEA это отношения не имеет.
А по валидатору можно только гадать, для начала сделайте, как советовала Ксения.
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 22:10
я так делал
int[] tenFirst = new int[10];
int[] tenSecond = new int[10];
int[] tenFirst = Arrays.copyOf(twenty, 10);
int[] tenSecond = Arrays.copyOfRange(twenty, 9, 20);
for (int i = 0;i < tenSecond.length;i++)
System.out.println(tenSecond[i]);
IDEA сразу подчеркивает красным названия массивов и пишет Variable is already defind in the scope
0
IceBergMaster
3 декабря 2019, 22:12
Используйте уже созданные переменные, зачем создавать ещё две?
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 22:14
вот сейчас вообще не понял, я и так понимаю что тут тавтология но что тут лишнее я не понимаю
0
IceBergMaster
3 декабря 2019, 22:14
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 22:15
ядрена копоть, спасибо 👋
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 22:24
теперь последний пункт не проходит, магия :) и Idea ругается на второй массив грит инициализация избыточна давай удалим, я уже и с 10 по 20 и с 10 по 19 и с 9 по пробовал копировать видимо надо еще пробовать вникать вроде все ясно но не работает.
0
Анатолий Анатольевич Мишенин
3 декабря 2019, 22:29
new int[20] - 0123456789 10111213141516171819
tenSecond = Arrays.copyOfRange(twenty, 10, 19); должен скопировать вторую половину большого массива , но не копирует
0
IceBergMaster
3 декабря 2019, 22:33
Потому что это 9 элементов.
Когда речь идет о интервалах, всегда включается нижняя граница, но не верхняя.
0
Ksenia Volkova Java Developer в DXC Master
4 декабря 2019, 06:25
Верни обратно Arrays.copyOfRange(twenty, 10, 20);
0
Анатолий Анатольевич Мишенин
4 декабря 2019, 14:34
Короче все работало, это я еще плохо понимаю как работать в IDEA, с утра все загрузил и все окей, да я вернул как было. Я понял что надо штудировать прогу, а не посоветуешь по ней литературку какую-нибудь ?
0
Артем Divertitto Senior Android-разработчи в United Tech Master
4 декабря 2019, 14:38
С помощью проб и ошибок в проге намного эффективнее разбираться.
А если хочешь что-то узнать, можешь зайти к ним на официальный сайт
0
Ksenia Volkova Java Developer в DXC Master
4 декабря 2019, 15:09
Литературка не попадалась как-то, в основном на практике все постигается.
Вроде у JetBrains плагин обучающий был какой-то
Поищи "IDE Features Trainer". Я, правда, сама не пробовала.
0
Анатолий Анатольевич Мишенин
5 декабря 2019, 13:51
спасибо
0
Анатолий Анатольевич Мишенин
5 декабря 2019, 13:52
спасибо
0