Java для начинающих. 7.3 Практика массивов

Поділитися
Вставка
  • Опубліковано 17 гру 2024

КОМЕНТАРІ • 78

  • @МаксМакс-ч8к
    @МаксМакс-ч8к 2 роки тому +11

    Всем доброго дня! 1.5 месяца, как начал заниматься java, первый раз встречаю настолько толковое объяснение данной темы!
    Огромное спасибо автору!!!

    • @dmdev
      @dmdev  2 роки тому +2

      Круто! Очень рад, что понравилось!
      Удачи в изучении Java. У меня на канале есть все необходимое для Java разработчика.
      Главное - последовательно изучай :)

  • @pipa-pg7kp
    @pipa-pg7kp 2 роки тому +6

    Дружище, спасибо!!! Решение с созданием отдельно переменной currentIndex и отдельно currentValue - ваще огонь!!!Мне пригодилось, когда надо было массив распилить на две части и каждую часть просчитывать отдельно =))

    • @dmdev
      @dmdev  2 роки тому +2

      Всегда пожалуйста

  • @SvetlanaGarcia
    @SvetlanaGarcia 9 місяців тому +1

    Большое спасибо за материал, за толковое объяснение! Мне помогает Ваш канал в изучении Java

    • @dmdev
      @dmdev  9 місяців тому

      Очень рад, что понравился мой канал!
      Главное изучать все последовательно, согласно roadmap (есть под каждым видео ссылка)

  • @Elitehome.textile
    @Elitehome.textile Рік тому +1

    я начинающий жавер, ваше видео поможет стать профи жавистом, огромное спасибо вам!!!

    • @dmdev
      @dmdev  Рік тому

      Всегда пожалуйста!

  • @rysnurlanov8012
    @rysnurlanov8012 4 роки тому +6

    Аналогия про "три стакана" 👍🏻 вы просто пушка 😎😅😅раньше не понимал, сейчас всё Окей!

    • @dmdev
      @dmdev  4 роки тому +2

      Согласен, аналогия из жизни всегда воспринимает человеком проще)

    • @rysnurlanov8012
      @rysnurlanov8012 4 роки тому +2

      @@dmdev круто, у меня тест по Java основы будет через час . По вашим урокам нехило так прокачался 👍🏻💪🏻🔥

    • @dmdev
      @dmdev  4 роки тому +2

      @@rysnurlanov8012 Здорово! Удачи тебе)

    • @rysnurlanov8012
      @rysnurlanov8012 4 роки тому +3

      @@dmdev я сдал на 100 баллов, едем дальше 👍🏻❤️

    • @dmdev
      @dmdev  4 роки тому +1

      @@rysnurlanov8012 Здорово, поздравляю! Продолжай в том же духе на моем канале и ты еще много чего интересного для себя узнаешь)

  • @vlabaka1421
    @vlabaka1421 Рік тому +1

    Профи))) Спасибо за труд!!

    • @dmdev
      @dmdev  Рік тому

      Всегда пожалуйста

  • @khrom-h7j
    @khrom-h7j 4 роки тому +3

    замечательно входит)))) и выходит!)))) на17й минуте вспомнилось))))

    • @dmdev
      @dmdev  4 роки тому +1

      есть такое :)

  • @A10ne888
    @A10ne888 2 роки тому +1

    Хорошо объяснил. Спасибо💪

    • @dmdev
      @dmdev  2 роки тому +1

      Рад, что понравилось!

  • @ДмитрийКустов-у9о
    @ДмитрийКустов-у9о 2 роки тому

    Денис, привет еще раз.
    1. Я наверное переучился, но так и не понял для чего мы вызывали функцию из предыдущего занятия)
    Вроде же все с нынешней функцией было хорошо, кроме того, что она не выводила на консоль результат. Но это же можно было прописать.
    2. Третье задание это просто вынос мозга, я уже к row1 и row2 поплыл, тяжело))
    Иногда очень хочется, чтобы как для тупых объяснял, но, видимо, тогда ролики были бы по 2 часа)
    Спасибо за курс!

    • @dmdev
      @dmdev  2 роки тому +1

      если это новая для тебя сфера - то естественно будет тяжело. Тут уже все зависит от твоего упорства и дисциплины. Если продолжишь - то рано или поздно придет понимание происходящего и как и в любой сфере начнешь получать удовольствие)

    • @ИванКомаров-д8ф
      @ИванКомаров-д8ф Рік тому

      Я в начале тоже не понял зачем нам row1 и 2. В конце объяснения задачки дошло, что он их просто так назвал, чтобы в дальнейшем писанину сократить. Хотя в глобальном смысле это не обязательно
      А вот про вврывание функции из другого класса пока сам не очень понял, нужно пересмотреть этот момент

  • @medicdoma
    @medicdoma 2 роки тому +3

    спасибо

    • @dmdev
      @dmdev  2 роки тому +1

      Всегда пожалуйста!

  • @никитаснигиревич
    @никитаснигиревич 4 роки тому +3

    огонь!

  • @profesor2009
    @profesor2009 Рік тому

    13:23 а как тогда получились значения 500, 600, 700, если надо вывести только значения в диапазоне 100?

    • @dmdev
      @dmdev  Рік тому

      В условии написано "первые 100 чисел, которые делятся на 13 или 17".
      В условии не написано "в диапазоне 100"

  • @ГаннибалБарка-л8р
    @ГаннибалБарка-л8р 4 роки тому +1

    И всё таки minValue и maxValue нужно обязательно создавать, иначе не правильно считает компилятор (или правильно, но я, например, не понимаю как)

    • @dmdev
      @dmdev  4 роки тому +1

      так там не говорилось, что не нужно создавать, там говорилось о присваивании начального значения minValue and maxValue - устанавливать его каким-то первым значением из массива или же каким-то фиктивным (dummy)

  • @gamespacestudio3547
    @gamespacestudio3547 3 роки тому +2

    на 29:16 как ты меняешь строки местами?

    • @dmdev
      @dmdev  3 роки тому +4

      ctrl + shift + стрелочки вверх-вниз
      дальше в курсе я подключу плагин будет автоматически отображаться снизу справа все быстрые клавиши, что я набираю

  • @grigoriyfedorov6481
    @grigoriyfedorov6481 Рік тому +1

    Спасибо за видео! А если мне нужно вывести в консоль не 1 5 7 9 11, а например [1, 5, 7, 9, 11]? Спасибо ❤

    • @dmdev
      @dmdev  Рік тому +1

      Просто сделай sout квадртаных скобочек до и после вывода массива. Ну и плюс запятую выводи после каждого элемента, если этот элемент не последний в массиве

  • @xirrantos
    @xirrantos 4 роки тому

    Проверка всех соответствующих элементов двухмерных массивов на равенство. Без проверки эксепшенов.
    Работает с равными массивами с одинаковыми размерами всех строк. Выдает в консоль все соответствующие значения.
    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;
    }

    • @dmdev
      @dmdev  4 роки тому +1

      1. Метод не возвращает true/false, поэтому никак его не применишь в коде
      2. Не будет работать, если у массивов разное кол-во элементов. Зря ты убрал проверки
      Попробуй два массива и получишь исключение: {{1, 2}, {5}} и {{1}, {2, 5}}

    • @xirrantos
      @xirrantos 4 роки тому +1

      @@dmdev ну это все несложно поправить. Проверки не написал, планирую сделать проверку каждой строки на длину и проверять столько значений, сколько в самой короткой строке. Аналогично с количеством строк.
      По поводу булей - хочу сделать через возврат объектов для каждого совпадения.
      Не ради практичности, а практики ради :)

    • @dmdev
      @dmdev  4 роки тому +1

      @@xirrantos да, все верно, но без проверок никуда!

    • @xirrantos
      @xirrantos 4 роки тому

      @@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!");
      }
      }
      }
      }

    • @xirrantos
      @xirrantos 4 роки тому

      Можно даже упростить вот тут:
      for (int rowIndex = 0; rowIndex < minArrayLength; rowIndex++) {
      int minCurrentRowLength = Math.min(firstArray[rowIndex].length, secondArray[rowIndex].length);

  • @playwithmary336
    @playwithmary336 Рік тому +2

    я пересмотрел трижды, повторяя все действия из видео в ИДЕ-шке, и так до конца не понял последние задания, то есть не могу сам все повторить без подсмотра в видео, это вообще нормально или я такой тупой?

    • @dmdev
      @dmdev  Рік тому +1

      Конечно нормально. Ты когда видишь, например, как другой человек катается на сноуборде - тоже сразу можешь за ним повторить? Вряд ли, обычно тебе нужно много практики, чтобы хотя бы стоять на ногах и спускаться вниз без падений. Тут точно также - просто больше практики и анализа уже существующих решений (набивать руку еще говорят)

  • @ТимофейФейк
    @ТимофейФейк 2 роки тому

    не подумал о испльзовании оператора если в задаче два, реализация 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;
    }

  • @LANg.gg8
    @LANg.gg8 2 роки тому +1

    что за плагин на текст ? красиво очень выглядит

    • @dmdev
      @dmdev  2 роки тому +2

      Я все показывал и рассказывал в предыдущем видео. Посмотри с заголовком "5.2 Полезные возможности IntelliJ IDEA". А лучше не пропускать видео и изучать последовательно курсы)

  • @alexxxyzzz
    @alexxxyzzz Рік тому

    Привет, я из будущего. Если вы уже решили ДЗ по теме, и до сих пор думаете над 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
      @dmdev  Рік тому

      Предоставленное решение не будет работать в случае разных размеров массивов array1 и array2. Поэтому проще все-таки вряд ли получится реализовать

    • @alexxxyzzz
      @alexxxyzzz Рік тому

      @@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 меньших, и их заполнение, а тут наоборот, при слиянии двух массивов и заполнении результирующего.

    • @alexxxyzzz
      @alexxxyzzz Рік тому +1

      @@dmdevДумаю, что для обучения проще не всегда означает лучше, мозги нужно готовить к сложной логике. И ваше решение в этом плане как раз для этих целей подходит. И мне оно очень даже понравилось. Так держать! 👍

    • @dmdev
      @dmdev  Рік тому

      @@alexxxyzzz точно, не заметил! Но все равно решение требует попеременного чередования элементов из обоих массивов (как приведено в примере задания), а не последовательно как в твоем решении (сначала один массив, потом второй)

  • @senior-blacksmith
    @senior-blacksmith Рік тому

    во второй задаче у меня выводит следующее: 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  Рік тому +1

      Потому что код написан иначе. Просто посмотри внимательнее на разницу. Можешь в чат dmdev скинуть, если не получится найти

    • @senior-blacksmith
      @senior-blacksmith Рік тому

      @@dmdev спасибо большущее!

    • @dmdev
      @dmdev  Рік тому

      @@senior-blacksmith

  • @channelMy
    @channelMy 2 роки тому +1

    смотрю на скорость 0,75

    • @dmdev
      @dmdev  2 роки тому +1

      Я в последующих курсах замедлюсь, чтобы было более комфортно смотреть на стандартной скорости

  • @kotbegemot9177
    @kotbegemot9177 3 роки тому +1

    упс, задача №2 неправильно = забыл currentValue с 0 пустить

    • @dmdev
      @dmdev  3 роки тому +3

      Все правильно)
      Ноль и так на любое число делится, нас это не интересует

  • @alexegvon2571
    @alexegvon2571 Рік тому

    Капец, все равно в голове не укладывается, нафига столько значений?Зачем этот индекс, зачем надо было писать лишний раз row1,row2). Такая матрешка, голова раскалывается).

    • @dmdev
      @dmdev  Рік тому

      Это так только с непривычки. Далее все будет наслаиваться: одни знания поверх других. В данном случае на массивах будут основываться другие структуры данных и классы, которые я буду показывать в следующем курсе Java level 2.
      Поэтому главное не забрасывать и продолжать!

  • @ЮраКубинець
    @ЮраКубинець 2 роки тому

    даже на 0.75 плохо... лутчше уж другое что то найду

    • @dmdev
      @dmdev  2 роки тому

      Что именно плохо? Понимаешь плохо?

  • @dmphxzrche288
    @dmphxzrche288 2 роки тому +1

    А я не понял во второй задаче, если мы не возвращали заполненный массив из функции fillArray, то как мы его смогли напечатать?
    И в догонку второй вопрос. Если мы передаем массив в функцию, под него дополнительно область в памяти выделяется или как?
    @dmdev, ответь плиз

    • @dmdev
      @dmdev  2 роки тому +2

      Привет, Дмитрий!
      1. Потому что массивы - это уже сложные объекты в отличие от примитивных типов данных. Для хорошего понимая как смогли напечатать - нужно понимать что такое ссылка, ибо мы ссылаемся на один и тот же массив в памяти, благодаря чему и можем печатать его (более подробно про ссылки увидишь в след курсе на теме Stack & Heap).
      2. Выделяется память только под размер ссылки, а не под сам массив (опять же, смори ответ на пункт 1).
      А вообще, очень хорошие вопросы задаешь!!!

    • @dmphxzrche288
      @dmphxzrche288 2 роки тому +2

      @@dmdev спасибо огромное за такой быстрый ответ! Прочитал про ссылки - все прояснилось.)
      Отличный курс, особенно нравится как ты рассуждаешь вслух при решении задач - становиться сразу понятно откуда что берется. Это мотивирует продолжать учиться, не вводит в ступор, как на других курсах👍)

    • @dmdev
      @dmdev  2 роки тому +2

      @@dmphxzrche288 всегда пожалуйста! Главное последовательно изучай все мои курсы, не пропуская ни один (видео тоже не пропускай). И тогда точно все станет на свои места