Пропустіть два масиви рядків і підрахуйте масиву occurray у масиві x в Java

Я створив метод Java, який, коли проходив два масиви рядків x та y, підраховує кількість разів, коли кожна рядок, що відбувається в y відбувається в x, і друкує результати в порядку, в якому рядки з'являються у y. Наприклад, подивіться на основну функцію, вона повинна виводитись як ab: 2, dc: 1, ef: 0. Мій код не працював, оскільки він виводив ab: 1, ab: 2, dc: 3.

public class stringOccurInArray {
    public static void stringOccurInY(String[] x, String[] y) {
        int count = 0;
        for(int i=0; i
1
Перш ніж ставити це питання, ви навіть намагалися налагодити код один раз?
додано Автор GD_Java, джерело
Чому ви використовуєте contains() замість equals() ?
додано Автор Rohit Jain, джерело
Крім того, спробуйте використовувати ArrayList замість традиційних масивів.
додано Автор Rohit Jain, джерело

6 Відповіді

Є кілька речей, про які слід згадати. Легко переписати ваш код таким чином:

public static void stringOccurInY(String[] x, String[] y) {
    int count = 0;
    for (int i = 0; i < y.length; i++) {          
        for (int j = 0; j < x.length; j++) {
            if (y[i].contains(x[j])) {
                count++;
            }
        }
        System.out.println(y[i] + ": " + count);
        count = 0;//reset the count
    }
}

ви повинні пересуватися над y в першу чергу.

Також ви можете замінити повторення через foreach цикл.

for (String aY : y) {
    int count = 0;
    for (String aX : x) {
        if (aY.contains(aX)) {
            count++;
        }
    }
    System.out.println(aY + ": " + count);
    //no need to reset the count
}
2
додано
У цьому випадку count не потрібно скидати після for for, оскільки воно повторно ініціалізується перед ним
додано Автор BackSlash, джерело
дякую, вийняв ініціалізацію з циклу, хоча це не має сенсу мати перелік змін з циклів. він буде мати останній розрахований рахунок з циклу
додано Автор Tala, джерело
Друга реалізація усуває необхідність скидання
додано Автор Tala, джерело

Зробіть такі модифікації, щоб він працював правильно:

  • Перемкніть x і y в цикли for .
    • Друкуйте у зовнішній петлі, щоб уникнути повторення відбитків для одного виду.
    • Initialize count inside the outer loop to avoid repeatedly initializing it.
      public class stringOccurInArray {
          public static void stringOccurInY(String[] x, String[] y) {
              for(int i=0; i
  • 1
    додано
    public static void stringOccurInY(String[] x, String[] y) {
            int count = 0;
            for(int i=0; i
    1
    додано
    @MarounMaroun, спасибі ... зробив помилку, якщо сфера діяльності і перша область застосування
    додано Автор stinepike, джерело
    Ви повинні надрукувати результат за межами внутрішньої для циклу.
    додано Автор Maroun, джерело

    Визначте int j = 0 поза циклу, а потім перемістіть System.out.println (y [j] + ":" + count); за межами першого для циклу і скинути count до 0 у першому рядку зовнішнього циклу for .

    BTW, чому ви не використовуєте String # equals ?

    1
    додано
    Це покаже помилку компілятора.
    додано Автор Rohit Jain, джерело

    Ви також можете спробувати код нижче. Те саме, що ви хочете:

    public static void stringOccurInY(String[] x, String[] y) {
            int count = 0;
            HashMap map = new HashMap();
            for(int i=0; i
    0
    додано

    Ваш код повинен бути:

    for(int i=0; i
    0
    додано
    ІТ КПІ - Java
    ІТ КПІ - Java
    436 учасників