ниже задача. её не пропускает валидатор. потому что переполнение массива который нужно вывести. мне указали на ошибку что нужно выводить массив с правильным индексом, а я вообще не вкуриваю. помогите разобраться. расскажите как сделать.
package com.javarush.task.task07.task0705;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
Один большой массив и два маленьких
*/
public class Solution
{
public static void main(String[] args) throws Exception
{
//напишите тут ваш код
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int [] bigArray = new int[20];
int [] smallArrayOne = new int [10];
int [] smallArrayTwo = new int [10];
for(int i = 0; i<bigArray.length; i++)
{
String s = reader.readLine();
bigArray[i] = Integer.parseInt(s);
if (i< smallArrayOne.length){
smallArrayOne[i] = bigArray[i];
}
else{
smallArrayTwo[i-smallArrayOne.length] = bigArray[i];
}
System.out.println(smallArrayTwo[i]);
}
}
}
Дмитрий
7 уровень
требуется пояснительная бригада
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Дмитрий
12 декабря 2022, 18:10
все равно не могу понять почему сыпится, что массив заполняется от 0 до н это я понимаю. В if первый массив smallArrayOne заполняется а вот второй выдает 0 и ошибку переполнентя. кто подскажет как разобраться уже бьюсь над задачей неделю.хочу решить именно через иф.может нужен второй цикл?или всетаки можно обойтись одним?
0
Justinian Judge в Mega City One Master
18 декабря 2022, 08:15
тот код который в посте отредактирован насколько я понимаю, и по идее будет работать, просто System.out.println не там стоит.
Но следует сказать, что это не будет являться решением задачи, живой человек такое бы не пропустил и сказал переделывать, поскольку условие задачи следующее.
Создаешь массив на 20, заполняешь и только после того как первый массив будет полностью заполнен на 20 элементов, тогда начинаешь копировать, поскольку здесь хотят чтобы ты поработал с копированиями массива, в то время как твой вопрос по заполнению.
0
Дмитрий
20 декабря 2022, 04:01
Спасибо, часть с заполнением я сделал вот так
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int [] big = new int[20];
int [] smallOne = new int [10];
int [] smallTwo = new int [10];
for(int i = 0; i<big.length; i++)
{
String s = reader.readLine();
big[i] = Integer.parseInt(s);
вторую часть сделал вот так
добавил еще один for и услоуие
for(int i = 0; i<big.length; i++)
{
if (i< smallOne.length)
{
smallOne[i] = bigArray[i];
}
else
{
smallTwo[i-smallOne.length] = bigArray[i];
}
System.out.println(smallTwo[i])
}
И все равно это С.......ное переполнение
0
Justinian Judge в Mega City One Master
20 декабря 2022, 06:00
с того что я вижу, для тебя самый главный урок в этой задаче это все делать по частям, этот принцип постоянно используется в реальном коде, как в жизни мы не наливаем суп, компот, макароны, чай и котлету в одну миску, так и в коде мы не делаем все и сразу, ну вернее есть там безусловно какие-то моменты, что мы можем читать с консоли и сразу там кидать в массив или может суммировать, но это уже частности, здесь общий принцип понять.
Вот в этой задаче, читаем условия и делаем декомпозицю, что нам нужно сделать?
1. Ввести с консоли 20 чисел и заполнить массив
2. Создать два массива по 10 чисел.
3. Скопировать одну половину большого массива в первый маленький, а вторую - во второй
4. Вывести второй массив на экран.
Ну и делается
все , первый пункт сделали, идем дальше
Все, второй и третий пункт сделали.
А дальше выводим на экран:
и все ок.
Видишь, отдельные три блока, каждый из который исполняется отдельно и по очереди.
А почему не пишут много разного в одном месте, поскольку очень легко напутать, легко совершить ошибку и тяжело ее найти, как в твоем случае:
массив у тебя smallTwo, а индекс - i ты берешь с bigArray, и конечно будет ошибка, поскольку у smallTwo допустимый диапазон индексов 0..9, а i у тебя 0..19
0
Дмитрий
20 декабря 2022, 10:58
Спасибо огоромное. За подробный ответ. Я иак понял что в одном цикле не реально сделать. Что проще бить всегда на мелкие подзадачи дабы исключить ошибки.
+1
Ilya
8 декабря 2022, 19:49
у bigArray нет 20 индекса, так как элементы массива, как и многое другое нумеруются с 0, а не единицы, поэтому i<bigArray.length+1 укажет в итоге на 20 элемент, которого нет.
0
Денис Enterprise Java Developer
7 декабря 2022, 19:06
В массиве длинной N нет элемента с индексом N потому как индексация идет с нуля, а не с единицы.
Потому вот это
и заставляет твой код падать как только i становится равна bigArray.length и ты пытаешься что-то с этим индексом сделать.
Возможно ты еще где-то напутал с индексами, я сильно не вчитывался. 0
Alukard Vampire hunter в The Hellsing Expert
7 декабря 2022, 14:57
Для начала приведи свой код в читабельный вариант.
Есть специальный тег код.
Пример ниже.
+1