Круто! Очень рад, что понравилось! Удачи в изучении Java. У меня на канале есть все необходимое для Java разработчика. Главное - последовательно изучай :)
Дружище, спасибо!!! Решение с созданием отдельно переменной currentIndex и отдельно currentValue - ваще огонь!!!Мне пригодилось, когда надо было массив распилить на две части и каждую часть просчитывать отдельно =))
Денис, привет еще раз. 1. Я наверное переучился, но так и не понял для чего мы вызывали функцию из предыдущего занятия) Вроде же все с нынешней функцией было хорошо, кроме того, что она не выводила на консоль результат. Но это же можно было прописать. 2. Третье задание это просто вынос мозга, я уже к row1 и row2 поплыл, тяжело)) Иногда очень хочется, чтобы как для тупых объяснял, но, видимо, тогда ролики были бы по 2 часа) Спасибо за курс!
если это новая для тебя сфера - то естественно будет тяжело. Тут уже все зависит от твоего упорства и дисциплины. Если продолжишь - то рано или поздно придет понимание происходящего и как и в любой сфере начнешь получать удовольствие)
Я в начале тоже не понял зачем нам row1 и 2. В конце объяснения задачки дошло, что он их просто так назвал, чтобы в дальнейшем писанину сократить. Хотя в глобальном смысле это не обязательно А вот про вврывание функции из другого класса пока сам не очень понял, нужно пересмотреть этот момент
так там не говорилось, что не нужно создавать, там говорилось о присваивании начального значения minValue and maxValue - устанавливать его каким-то первым значением из массива или же каким-то фиктивным (dummy)
Просто сделай sout квадртаных скобочек до и после вывода массива. Ну и плюс запятую выводи после каждого элемента, если этот элемент не последний в массиве
Проверка всех соответствующих элементов двухмерных массивов на равенство. Без проверки эксепшенов. Работает с равными массивами с одинаковыми размерами всех строк. Выдает в консоль все соответствующие значения. public static void equals(int[][] firstArray, int[][] secondArray) {
int columnIndex = 0; int[] row1 = firstArray[0]; for (int rowIndex = 0; rowIndex < firstArray.length; rowIndex++) {
for (int i = 0; i < row1.length; i++) { if (firstArray[rowIndex][columnIndex] == secondArray[rowIndex][columnIndex]){ System.out.println("arrays " + "[" + rowIndex + "][" + columnIndex + "] are equals!"); } columnIndex++; } columnIndex = 0; }
1. Метод не возвращает true/false, поэтому никак его не применишь в коде 2. Не будет работать, если у массивов разное кол-во элементов. Зря ты убрал проверки Попробуй два массива и получишь исключение: {{1, 2}, {5}} и {{1}, {2, 5}}
@@dmdev ну это все несложно поправить. Проверки не написал, планирую сделать проверку каждой строки на длину и проверять столько значений, сколько в самой короткой строке. Аналогично с количеством строк. По поводу булей - хочу сделать через возврат объектов для каждого совпадения. Не ради практичности, а практики ради :)
Можно даже упростить вот тут: for (int rowIndex = 0; rowIndex < minArrayLength; rowIndex++) { int minCurrentRowLength = Math.min(firstArray[rowIndex].length, secondArray[rowIndex].length);
я пересмотрел трижды, повторяя все действия из видео в ИДЕ-шке, и так до конца не понял последние задания, то есть не могу сам все повторить без подсмотра в видео, это вообще нормально или я такой тупой?
Конечно нормально. Ты когда видишь, например, как другой человек катается на сноуборде - тоже сразу можешь за ним повторить? Вряд ли, обычно тебе нужно много практики, чтобы хотя бы стоять на ногах и спускаться вниз без падений. Тут точно также - просто больше практики и анализа уже существующих решений (набивать руку еще говорят)
Я все показывал и рассказывал в предыдущем видео. Посмотри с заголовком "5.2 Полезные возможности IntelliJ IDEA". А лучше не пропускать видео и изучать последовательно курсы)
Привет, я из будущего. Если вы уже решили ДЗ по теме, и до сих пор думаете над Task3, в частности о том, зачем при слиянии двух массивов использовать один цикл с проверкой условий? Ведь можно же проще, обойтись без проверок в теле цикла, и вместо одного цикла использовать два - в первом цикле последовательно скопировав в результирующий массив данные из первого массива, а затем во втором цикле последовательно скопировав данные из второго массива в результирующий. Что-то вроде этого: private static int[] mergeTwoArrays(int[] array1, int[] array2) { int len1 = array1.length; int len2 = array2.length; int[] resultArray = new int[len1 + len2]; for (int i = 0; i < len1; i++) { resultArray[i] = array1[i]; } for (int i = 0; i < len2; i++) { resultArray[len1+i] = array2[i]; } return resultArray; } На самом деле то можно и обойтись без проверок внутри тела цикла, но вот эти самые условия в теле цикла: "if (index1 < values1.length && index2 < values2.length)" это элементы из алгоритма сортировки слиянием, и там нужно два предварительно отсортированных массива слить в один отсортированный массив. И когда вы будете изучать базы данных, то увидите, что при соединении двух таблиц элементы из алгоритма mergeSort тоже используются. И знание этого алгоритма позволит вам понять его временную сложность. А временную сложность нужно уметь оценивать при манипуляции с любыми данными. Алгоритм сортировки слиянием конечно же сложнее чем простое слияние двух рандомных массивов, поэтому для начала нужно разобраться с логикой, которая представлена в решении автора, на гитхабе. Именно разобраться и если логика ясна, то двигаться дальше, всё ок! 🥳
@@dmdev Заполнение результирующего массива контролируется с помощью двух переменных, len1 и len2. Длины массивов могут быть произвольными. Можете проверить: public class Task3 { public static void main(String[] args) { int[] array1 = {1, 2, 3, 4, 5}; int[] array2 = {5, 6, 7}; int[] mergeTwoArrays = mergeTwoArrays(array1, array2); System.out.println(Arrays.toString(mergeTwoArrays)); } private static int[] mergeTwoArrays(int[] array1, int[] array2) { int len1 = array1.length; int len2 = array2.length; int[] resultArray = new int[len1 + len2]; for (int i = 0; i < len1; i++) { resultArray[i] = array1[i]; } for (int i = 0; i < len2; i++) { resultArray[len1+i] = array2[i]; } return resultArray; } } p.s. Эти два последовательных цикла for взяты мною из сортировки слиянием, только там мы их используем при разбиении одного массива на 2 меньших, и их заполнение, а тут наоборот, при слиянии двух массивов и заполнении результирующего.
@@dmdevДумаю, что для обучения проще не всегда означает лучше, мозги нужно готовить к сложной логике. И ваше решение в этом плане как раз для этих целей подходит. И мне оно очень даже понравилось. Так держать! 👍
@@alexxxyzzz точно, не заметил! Но все равно решение требует попеременного чередования элементов из обоих массивов (как приведено в примере задания), а не последовательно как в твоем решении (сначала один массив, потом второй)
Капец, все равно в голове не укладывается, нафига столько значений?Зачем этот индекс, зачем надо было писать лишний раз row1,row2). Такая матрешка, голова раскалывается).
Это так только с непривычки. Далее все будет наслаиваться: одни знания поверх других. В данном случае на массивах будут основываться другие структуры данных и классы, которые я буду показывать в следующем курсе Java level 2. Поэтому главное не забрасывать и продолжать!
А я не понял во второй задаче, если мы не возвращали заполненный массив из функции fillArray, то как мы его смогли напечатать? И в догонку второй вопрос. Если мы передаем массив в функцию, под него дополнительно область в памяти выделяется или как? @dmdev, ответь плиз
Привет, Дмитрий! 1. Потому что массивы - это уже сложные объекты в отличие от примитивных типов данных. Для хорошего понимая как смогли напечатать - нужно понимать что такое ссылка, ибо мы ссылаемся на один и тот же массив в памяти, благодаря чему и можем печатать его (более подробно про ссылки увидишь в след курсе на теме Stack & Heap). 2. Выделяется память только под размер ссылки, а не под сам массив (опять же, смори ответ на пункт 1). А вообще, очень хорошие вопросы задаешь!!!
@@dmdev спасибо огромное за такой быстрый ответ! Прочитал про ссылки - все прояснилось.) Отличный курс, особенно нравится как ты рассуждаешь вслух при решении задач - становиться сразу понятно откуда что берется. Это мотивирует продолжать учиться, не вводит в ступор, как на других курсах👍)
@@dmphxzrche288 всегда пожалуйста! Главное последовательно изучай все мои курсы, не пропуская ни один (видео тоже не пропускай). И тогда точно все станет на свои места
Всем доброго дня! 1.5 месяца, как начал заниматься java, первый раз встречаю настолько толковое объяснение данной темы!
Огромное спасибо автору!!!
Круто! Очень рад, что понравилось!
Удачи в изучении Java. У меня на канале есть все необходимое для Java разработчика.
Главное - последовательно изучай :)
Дружище, спасибо!!! Решение с созданием отдельно переменной currentIndex и отдельно currentValue - ваще огонь!!!Мне пригодилось, когда надо было массив распилить на две части и каждую часть просчитывать отдельно =))
Всегда пожалуйста
Большое спасибо за материал, за толковое объяснение! Мне помогает Ваш канал в изучении Java
Очень рад, что понравился мой канал!
Главное изучать все последовательно, согласно roadmap (есть под каждым видео ссылка)
я начинающий жавер, ваше видео поможет стать профи жавистом, огромное спасибо вам!!!
Всегда пожалуйста!
Аналогия про "три стакана" 👍🏻 вы просто пушка 😎😅😅раньше не понимал, сейчас всё Окей!
Согласен, аналогия из жизни всегда воспринимает человеком проще)
@@dmdev круто, у меня тест по Java основы будет через час . По вашим урокам нехило так прокачался 👍🏻💪🏻🔥
@@rysnurlanov8012 Здорово! Удачи тебе)
@@dmdev я сдал на 100 баллов, едем дальше 👍🏻❤️
@@rysnurlanov8012 Здорово, поздравляю! Продолжай в том же духе на моем канале и ты еще много чего интересного для себя узнаешь)
Профи))) Спасибо за труд!!
Всегда пожалуйста
замечательно входит)))) и выходит!)))) на17й минуте вспомнилось))))
есть такое :)
Хорошо объяснил. Спасибо💪
Рад, что понравилось!
Денис, привет еще раз.
1. Я наверное переучился, но так и не понял для чего мы вызывали функцию из предыдущего занятия)
Вроде же все с нынешней функцией было хорошо, кроме того, что она не выводила на консоль результат. Но это же можно было прописать.
2. Третье задание это просто вынос мозга, я уже к row1 и row2 поплыл, тяжело))
Иногда очень хочется, чтобы как для тупых объяснял, но, видимо, тогда ролики были бы по 2 часа)
Спасибо за курс!
если это новая для тебя сфера - то естественно будет тяжело. Тут уже все зависит от твоего упорства и дисциплины. Если продолжишь - то рано или поздно придет понимание происходящего и как и в любой сфере начнешь получать удовольствие)
Я в начале тоже не понял зачем нам row1 и 2. В конце объяснения задачки дошло, что он их просто так назвал, чтобы в дальнейшем писанину сократить. Хотя в глобальном смысле это не обязательно
А вот про вврывание функции из другого класса пока сам не очень понял, нужно пересмотреть этот момент
спасибо
Всегда пожалуйста!
огонь!
👍
13:23 а как тогда получились значения 500, 600, 700, если надо вывести только значения в диапазоне 100?
В условии написано "первые 100 чисел, которые делятся на 13 или 17".
В условии не написано "в диапазоне 100"
И всё таки minValue и maxValue нужно обязательно создавать, иначе не правильно считает компилятор (или правильно, но я, например, не понимаю как)
так там не говорилось, что не нужно создавать, там говорилось о присваивании начального значения minValue and maxValue - устанавливать его каким-то первым значением из массива или же каким-то фиктивным (dummy)
на 29:16 как ты меняешь строки местами?
ctrl + shift + стрелочки вверх-вниз
дальше в курсе я подключу плагин будет автоматически отображаться снизу справа все быстрые клавиши, что я набираю
Спасибо за видео! А если мне нужно вывести в консоль не 1 5 7 9 11, а например [1, 5, 7, 9, 11]? Спасибо ❤
Просто сделай sout квадртаных скобочек до и после вывода массива. Ну и плюс запятую выводи после каждого элемента, если этот элемент не последний в массиве
Проверка всех соответствующих элементов двухмерных массивов на равенство. Без проверки эксепшенов.
Работает с равными массивами с одинаковыми размерами всех строк. Выдает в консоль все соответствующие значения.
public static void equals(int[][] firstArray, int[][] secondArray) {
int columnIndex = 0;
int[] row1 = firstArray[0];
for (int rowIndex = 0; rowIndex < firstArray.length; rowIndex++) {
for (int i = 0; i < row1.length; i++) {
if (firstArray[rowIndex][columnIndex] == secondArray[rowIndex][columnIndex]){
System.out.println("arrays " + "[" + rowIndex + "][" + columnIndex + "] are equals!");
}
columnIndex++;
}
columnIndex = 0;
}
1. Метод не возвращает true/false, поэтому никак его не применишь в коде
2. Не будет работать, если у массивов разное кол-во элементов. Зря ты убрал проверки
Попробуй два массива и получишь исключение: {{1, 2}, {5}} и {{1}, {2, 5}}
@@dmdev ну это все несложно поправить. Проверки не написал, планирую сделать проверку каждой строки на длину и проверять столько значений, сколько в самой короткой строке. Аналогично с количеством строк.
По поводу булей - хочу сделать через возврат объектов для каждого совпадения.
Не ради практичности, а практики ради :)
@@xirrantos да, все верно, но без проверок никуда!
@@dmdev
Вот любые два двухмерных целочисленных массива сравнит, с разным кол-вом строк и колонок.
Выдает пока только список равных значений)
public static void equals(int[][] firstArray, int[][] secondArray) {
int minArrayLength = Math.min(secondArray.length, firstArray.length);
for (int rowIndex = 0; rowIndex < minArrayLength; rowIndex++) {
int[] currentRow1 = firstArray[rowIndex];
int[] currentRow2 = secondArray[rowIndex];
int minCurrentRowLength = Math.min(currentRow1.length, currentRow2.length);
for (int columnIndex = 0; columnIndex < minCurrentRowLength; columnIndex++) {
if (firstArray[rowIndex][columnIndex] == secondArray[rowIndex][columnIndex]) {
System.out.println("arrays " + "[" + rowIndex + "][" + columnIndex + "] are equals!");
}
}
}
}
Можно даже упростить вот тут:
for (int rowIndex = 0; rowIndex < minArrayLength; rowIndex++) {
int minCurrentRowLength = Math.min(firstArray[rowIndex].length, secondArray[rowIndex].length);
я пересмотрел трижды, повторяя все действия из видео в ИДЕ-шке, и так до конца не понял последние задания, то есть не могу сам все повторить без подсмотра в видео, это вообще нормально или я такой тупой?
Конечно нормально. Ты когда видишь, например, как другой человек катается на сноуборде - тоже сразу можешь за ним повторить? Вряд ли, обычно тебе нужно много практики, чтобы хотя бы стоять на ногах и спускаться вниз без падений. Тут точно также - просто больше практики и анализа уже существующих решений (набивать руку еще говорят)
не подумал о испльзовании оператора если в задаче два, реализация fillarray через for
int CurrentValue = 1;
for (int i = 0; i < value.length; i++) {
value[i] = CurrentValue;
for (int j = CurrentValue; !(j % 13 == 0 || j % 17 == 0); j++) {
value[i] = j + 1;
}
CurrentValue = value[i] + 1;
}
что за плагин на текст ? красиво очень выглядит
Я все показывал и рассказывал в предыдущем видео. Посмотри с заголовком "5.2 Полезные возможности IntelliJ IDEA". А лучше не пропускать видео и изучать последовательно курсы)
Привет, я из будущего. Если вы уже решили ДЗ по теме, и до сих пор думаете над Task3, в частности о том, зачем при слиянии двух массивов использовать один цикл с проверкой условий?
Ведь можно же проще, обойтись без проверок в теле цикла, и вместо одного цикла использовать два - в первом цикле последовательно скопировав в результирующий массив данные из первого массива,
а затем во втором цикле последовательно скопировав данные из второго массива в результирующий. Что-то вроде этого:
private static int[] mergeTwoArrays(int[] array1, int[] array2) {
int len1 = array1.length;
int len2 = array2.length;
int[] resultArray = new int[len1 + len2];
for (int i = 0; i < len1; i++) {
resultArray[i] = array1[i];
}
for (int i = 0; i < len2; i++) {
resultArray[len1+i] = array2[i];
}
return resultArray;
}
На самом деле то можно и обойтись без проверок внутри тела цикла, но вот эти самые условия в теле цикла:
"if (index1 < values1.length && index2 < values2.length)"
это элементы из алгоритма сортировки слиянием,
и там нужно два предварительно отсортированных массива слить в один отсортированный массив. И когда вы будете изучать базы данных, то увидите, что при соединении двух таблиц элементы из алгоритма mergeSort тоже используются.
И знание этого алгоритма позволит вам понять его временную сложность. А временную сложность нужно уметь оценивать при манипуляции с любыми данными.
Алгоритм сортировки слиянием конечно же сложнее чем простое слияние двух рандомных массивов, поэтому для начала
нужно разобраться с логикой, которая представлена в решении автора, на гитхабе. Именно разобраться и если логика ясна, то двигаться дальше, всё ок! 🥳
Предоставленное решение не будет работать в случае разных размеров массивов array1 и array2. Поэтому проще все-таки вряд ли получится реализовать
@@dmdev
Заполнение результирующего массива контролируется с помощью двух переменных, len1 и len2. Длины массивов могут быть произвольными. Можете проверить:
public class Task3 {
public static void main(String[] args) {
int[] array1 = {1, 2, 3, 4, 5};
int[] array2 = {5, 6, 7};
int[] mergeTwoArrays = mergeTwoArrays(array1, array2);
System.out.println(Arrays.toString(mergeTwoArrays));
}
private static int[] mergeTwoArrays(int[] array1, int[] array2) {
int len1 = array1.length;
int len2 = array2.length;
int[] resultArray = new int[len1 + len2];
for (int i = 0; i < len1; i++) {
resultArray[i] = array1[i];
}
for (int i = 0; i < len2; i++) {
resultArray[len1+i] = array2[i];
}
return resultArray;
}
}
p.s. Эти два последовательных цикла for взяты мною из сортировки слиянием, только там мы их используем при разбиении одного массива на 2 меньших, и их заполнение, а тут наоборот, при слиянии двух массивов и заполнении результирующего.
@@dmdevДумаю, что для обучения проще не всегда означает лучше, мозги нужно готовить к сложной логике. И ваше решение в этом плане как раз для этих целей подходит. И мне оно очень даже понравилось. Так держать! 👍
@@alexxxyzzz точно, не заметил! Но все равно решение требует попеременного чередования элементов из обоих массивов (как приведено в примере задания), а не последовательно как в твоем решении (сначала один массив, потом второй)
во второй задаче у меня выводит следующее: 13 17 26 34 39 51 52 65 68 78 85 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
подскажите почему?
Потому что код написан иначе. Просто посмотри внимательнее на разницу. Можешь в чат dmdev скинуть, если не получится найти
@@dmdev спасибо большущее!
@@senior-blacksmith
смотрю на скорость 0,75
Я в последующих курсах замедлюсь, чтобы было более комфортно смотреть на стандартной скорости
упс, задача №2 неправильно = забыл currentValue с 0 пустить
Все правильно)
Ноль и так на любое число делится, нас это не интересует
Капец, все равно в голове не укладывается, нафига столько значений?Зачем этот индекс, зачем надо было писать лишний раз row1,row2). Такая матрешка, голова раскалывается).
Это так только с непривычки. Далее все будет наслаиваться: одни знания поверх других. В данном случае на массивах будут основываться другие структуры данных и классы, которые я буду показывать в следующем курсе Java level 2.
Поэтому главное не забрасывать и продолжать!
даже на 0.75 плохо... лутчше уж другое что то найду
Что именно плохо? Понимаешь плохо?
А я не понял во второй задаче, если мы не возвращали заполненный массив из функции fillArray, то как мы его смогли напечатать?
И в догонку второй вопрос. Если мы передаем массив в функцию, под него дополнительно область в памяти выделяется или как?
@dmdev, ответь плиз
Привет, Дмитрий!
1. Потому что массивы - это уже сложные объекты в отличие от примитивных типов данных. Для хорошего понимая как смогли напечатать - нужно понимать что такое ссылка, ибо мы ссылаемся на один и тот же массив в памяти, благодаря чему и можем печатать его (более подробно про ссылки увидишь в след курсе на теме Stack & Heap).
2. Выделяется память только под размер ссылки, а не под сам массив (опять же, смори ответ на пункт 1).
А вообще, очень хорошие вопросы задаешь!!!
@@dmdev спасибо огромное за такой быстрый ответ! Прочитал про ссылки - все прояснилось.)
Отличный курс, особенно нравится как ты рассуждаешь вслух при решении задач - становиться сразу понятно откуда что берется. Это мотивирует продолжать учиться, не вводит в ступор, как на других курсах👍)
@@dmphxzrche288 всегда пожалуйста! Главное последовательно изучай все мои курсы, не пропуская ни один (видео тоже не пропускай). И тогда точно все станет на свои места