Мне просто трудно понять материал класса из моего класса Java - PullRequest
0 голосов
/ 13 февраля 2019

Может кто-нибудь объяснить этот код построчно.Я только начал изучать, как кодировать, и сейчас я изучаю Java, но у меня возникают трудности с выполнением этой функции.Что значит new int[10];действительно?и я на самом деле не понимаю разницы или того, как часть repeatedDigits[index] используется иначе, чем часть repeatedDigits[remainder].

Напишите функцию, которая подсчитывает повторяющиеся цифры в целом числе x.

Для * например : если x равно 999, то ваша функция должна распечатать это 9 occurs 3 * times.Другой пример, если целое число x равно 992121, то ваша функция * должна вывести обратно 9 occurs 2 times, 2 occurs 2 times and 1 occurs 2 * times.Это было руководство для функции.

public static void countRepeatedDigitsInANumber(int x) {

int[] repeatedDigits = new int[10];
while (x > 0) {
int remainder = x % 10;
x = x / 10;
repeatedDigits[remainder] = repeatedDigits[remainder] + 1;

}

int index = 0;
while (index < 10) {

if (repeatedDigits[index] != 0)
    System.out.println("The digit " + index + " occurs " + 
    repeatedDigits[index]);
index++;

    }
}

Это код, который компилируется.Я просто публикую это, потому что мне трудно понять.Я был бы очень признателен, если бы кто-то мог также посоветовать изучить Java!

Ответы [ 4 ]

0 голосов
/ 13 февраля 2019

Дайте мне посмотреть, могу ли я кое-что прояснить для вас.Мое первое предложение - отформатировать ваш код так, чтобы строки внутри циклов были с отступом:

public static void countRepeatedDigitsInANumber(int x) {

  int[] repeatedDigits = new int[10];
  while (x > 0) {
    int remainder = x % 10;
    x = x / 10;
    repeatedDigits[remainder] = repeatedDigits[remainder] + 1;
  }

  int index = 0;
  while (index < 10) {
    if (repeatedDigits[index] != 0)
      System.out.println("The digit " + index + " occurs " + repeatedDigits[index]);
      index++;
    }
  }
}

Это помогает нам увидеть структуру программы.Теперь мы видим, что программа работает следующим образом:

  1. Определить новый массив int: int[] repeatedDigits = new int[10];
  2. Запустить цикл while: while (x > 0) { ... }
  3. Определите переменную int: int index = 0;
  4. Выполните вторую while, содержащую инструкцию if: while (index < 10) { if ( ... ) { ... } }

Я попытаюсь объяснитькаждая из четырех частей по одному.

  1. Сначала мы определим наш массив int.new int[10] определяет массив с десятью точками, каждая из которых может содержать целое число.Вы можете думать об этом как о десяти полях рядом друг с другом, каждый из которых помечен индексом.Этот массив будет использоваться для отслеживания того, сколько раз мы видели каждое целое число.repeatedDigits[0] будет содержать количество раз, когда мы видели цифру 0 в нашем номере;repeatedDigits[6] будет содержать число раз, когда мы видели 6 цифру и т. Д.

  2. Вот сердце программы.Мы собираемся разбить число, по одной цифре за раз, и для каждой цифры мы добавляем одну к месту в массиве, используемом для отслеживания того, сколько раз мы видели эту цифру.Эта строка дает нам самую правую цифру в нашем номере: int remainder = x % 10;.% называется оператором modulo, и вы можете найти его, чтобы узнать больше об этом.При вводе 992121 это назначит remainder для 1.

В следующей строке используется целочисленное деление для удаления этой последней цифры из числа, чтобы в следующий разчерез цикл мы получаем следующую цифру.если x = 992121, то после x = x / 10, x будет равно 99212.

Наконец, мы добавляем единицу к точке в массиве repeatedDigits, соответствующей цифре, которую мы видели.Итак, в нашем примере remainder = 1, поэтому мы добавляем 1 к repeatedDigits[1].Эта строка использует тот факт, что неинициализированный int по умолчанию равен 0.

Мы достигли конца цикла while, поэтому мы проверяем условие и находим, что x > 0, поэтому мы снова запускаем цикл.Мы повторяем это для каждой цифры входного числа`.

Тяжелая работа завершена;Остальная часть программы готова распечатать результаты.

Мы присваиваем index для 0. Следующий цикл while будет увеличивать эту переменную с 0 до 9, печатая значение массива repeatedDigits для каждой цифры.

Мы запускаем цикл с index = 0 до index = 9.Для каждого значения мы проверяем, видели ли мы эту цифру в нашем входном номере (это оператор if).Мы проверяем значение в repeatedDigits[index], чтобы убедиться, что оно не равно 0.Если это так, то мы должны увеличить его в предыдущем цикле, чтобы мы знали, что цифра появилась хотя бы один раз в исходном вводе.В этом случае мы печатаем строку в консоль, используя System.out.println.Затем мы увеличиваем index и снова запускаем цикл.

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы, и удачи!

0 голосов
/ 13 февраля 2019

Добро пожаловать в ТАК и прекрасный мир Java!Я добавил в свой ответ гиперссылки, которые могут вам помочь.

int[] repeatedDigits = new int[10];

Вышеуказанная строка кода создает массив из 10 элементов, от индекса 0 до индекса 9.

int remainder = x % 10;

Приведенная выше строка кода вычисляет остаток после деления x на 10. Например, если x = 9192, то это будетделение «9192/10 = 919,2» и взятие остатка.Который в этом случае является «2».Заметьте, как это на самом деле смотрит на число в обратном порядке?Таким образом, число типа «9192» фактически обрабатывается как «2919».

x = x / 10;

Приведенная выше строка кода делит число на 10- , так как при его целочисленном делении отбрасываются все десятичные значения.. Так как мы уже рассчитали последнее число.Таким образом, наш '9192' теперь просто '919'.

repeatedDigits[remainder] = repeatedDigits[remainder] + 1;

Вышеупомянутая строка кода идет к индексу массива остатка, который мы сохранили ранее.Помните, как наш остаток был «2»?Он не будет индексировать: 2 в нашем массиве и добавлять 1 к его значению, которое изначально было 0. Так что теперь наш массив по индексу: 2 имеет значение: 1. Значение числа 2 повторялось 1 раз.

То, что я изложил выше, это всего лишь 1 итерация цикла while, в котором находится верхняя половина вашего кода. Так что возьмите лист бумаги и повторите все, что я делал выше, с оставшимся числом «919».

Как только вы закончите, вы должны заметить, что ваш массив выглядит примерно так:

index 0: 0
index 1: 1
index 2: 1
index 3: 0
index 4 to 8: 0
index 9: 2

Это означает, что '1' пришел один раз.«2» пришел один раз.и '9' пришло дважды.

Что касается совета по изучению Java?Читать много.Обсудите каждый маленький вопрос, который у вас есть, и если вы не понимаете, как что-то работает, возьмите лист бумаги и выпишите его.

0 голосов
/ 13 февраля 2019
int[] repeatedDigits = new int[10];

// создаем массив целых чисел размером 10

while (x > 0) { 

// в то время как предоставленное целое число больше 0

int remainder = x % 10;

// получает наименьшее значениецифра в базовой десятке.101% 10 = 1

x = x / 10; 

// в базовой десятке это уменьшает размер числа на десятки.101/10 = 10, поскольку 10 можно полностью разделить на 101 10 раз.Таким образом, вы сбросили последнюю цифру номера.Это то, что позволит вам выйти из цикла while, так как в конечном итоге x будет равно 0.

repeatedDigits[remainder] = repeatedDigits[remainder] + 1;

остаток здесь может быть между 0-9.Это потому, что остаток - это остаток от деления предоставленного целого числа на 10. Вы не можете разделить число больше 0 на десять и иметь значение меньше нуля или больше 9.

Созданный вами массив имеетиндексы 0-9, поскольку это десять пробелов длиной (0,1,2,3,4,5,6,7,8,9).Вы присваиваете значение индекса повторяющихся цифр, которое соответствует вашему остатку, тому, что было ранее плюс 1.

Это означает, что вы обнаружили, что последняя цифра в номере равна некоторому значению X.X должен быть между 0-9.Поскольку у вас есть массив с индексами в диапазоне от 0 до 9, вы получаете значение, связанное с repeatDigits [X], добавляете его к нему, как только нашли другое значение X, и устанавливаете значение repeatDigits [X] равным тому, что было раньшеВы нашли этот новый X плюс один.

}

int index = 0;

Вы начинаете с первого значения массива (0)

while (index < 10) {

Просмотрите значения массива от 0 до 9

if (repeatedDigits[index] != 0)

, если значение массива repeatDigits в индексе не равно 0. Это то же самое, что сказать, если во входном номере найдено значение индекса.

    System.out.println("The digit " + index + " occurs " + 
    repeatedDigits[index]);

indexэто число, на которое мы смотрели.Подсчет того, сколько раз это произошло, сохраняется в repeatDigits [index].Мы печатаем значение и сколько раз оно произошло.

index++;

Увеличьте индекс, изучив следующее значение индекса.

    }
}
0 голосов
/ 13 февраля 2019

Что делает new int [10];

Создает новый массив размером 10, который может содержать int значений.Все значения в массиве будут инициализированы равными 0 (именно так Java обрабатывает int примитивы).

В этом случае, похоже, что этот массив используется для хранения количества раз, когда цифра, соответствующая его индексу, была замечена.

Хмм, что сбивало с толку, ивероятно, еще более запутанно читать, поэтому позвольте мне привести пример.Для ввода 992121 можно ожидать, что массив repeatedDigits будет выглядеть следующим образом, когда программа будет завершена:

[0, 2, 1, 0, 0, 0, 0, 0, 0, 2]

, т.е. два 1, один 2 и два 9 *


while (x > 0) {

Это запускает цикл, который будет продолжаться до тех пор, пока x не станет равным (или меньшим, чем, но этого не должно быть) нулю.


int remainder = x % 10;

Это по существу«захватывает» крайнюю правую цифру числа, используя модульную арифметику.Он делит число на 10, и любой остаток будет тем, что находится в «месте» (то есть самой правой цифре).


x = x / 10;

Это сдвигает цифры вправо на единицуи выбрасывает крайнюю правую цифру (поскольку вы уже ее захватили).


repeatedDigits[remainder] = repeatedDigits[remainder] + 1

Это просто увеличивает значение в массиве в соответствующем месте.Например, если вы только что нажали 9 с правого конца числа, это увеличит значение в repeatDigits [9], чтобы вы знали, что только что увидели дополнительные 9.


int index = 0;
while (index < 10) {

Мы собираемся сделать цикл!Есть (на мой взгляд) лучшие способы сделать это, но это работает так же хорошо.По сути, вы хотите, чтобы index начинался с 0 и проходил весь цикл до 9, но останавливался при достижении 10.


if (repeatedDigits[index] != 0)

Если значение в данном месте вrepeatedDigits массив не равен нулю, тогда ...


System.out.println("The digit " + index + " occurs " + repeatedDigits[index]);

... распечатать его!


index++;

И, наконец, приращение indexтак что мы можем проверить следующий номер.Это точно так же, как index = index + 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...