Задать вопрос
@bublov

Что не так с методом indexOf?

Код:
import java.util.*;

public class Main {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();
        while (!(1 <= a && a <= b && b <= Math.pow(10, 6) && b - a <= 3000)) {
            System.out.println("Вы ввели неккоректное значение");
            a = in.nextInt();
            b = in.nextInt();
        }
        int[] masOfNumbers = new int[b-a+1];
        int[] masOfDividers = new int[b-a+1];
        for(int d = 1; d<=(b-a+1); d++){
            masOfNumbers[d-1] = a+d-1;
        }
        for(int c = 1; c<=(b-a+1); c++){
            masOfDividers[c-1] = 0;
        }
        for(int i = a; i<=b; i++){
            for(int j = 1; j<=i; j++){
                if(i%j==0){
                    masOfDividers[i-a]++;
                }
            }
        }
        int max = getMax(masOfDividers);
        String str = Arrays.toString(masOfDividers).replaceAll("\\[|\\]|,|\\s", "");
        System.out.println(masOfNumbers[str.indexOf(max)]);
    }
    public static int getMax(int[] arrayForFindingTheMaximum)
    {
        int maximum = Integer.MIN_VALUE;
        for (int i = 0; i < arrayForFindingTheMaximum.length; i++)
        {
            maximum = Math.max(maximum, arrayForFindingTheMaximum[i]);
        }

        return maximum;
    }
}

Проблема заключается в последних трёх строках метода main.
Я проверил обе переменные при a = 1, b =25; max - 8, str - 1223242434262445262644283.
Но почему тогда str.indexOf(max) выдаёт -1?
  • Вопрос задан
  • 342 просмотра
Подписаться 1 Простой 4 комментария
Решения вопроса 1
EreminD
@EreminD
Кое-что умею
вам стоит использовать debug, чтобы понять, как это работает

public int indexOf(int ch, int fromIndex) {
        final int max = value.length;
        if (fromIndex < 0) {
            fromIndex = 0;
        } else if (fromIndex >= max) {
            // Note: fromIndex might be near -1>>>1.
            return -1;
        }

        if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
            // handle most cases here (ch is a BMP code point or a
            // negative value (invalid code point))
            final char[] value = this.value;
            for (int i = fromIndex; i < max; i++) {
                if (value[i] == ch) {
                    return i;
                }
            }
            return -1;
        } else {
            return indexOfSupplementary(ch, fromIndex);
        }
    }


Ваша строка str преобразуется в массив символов ( final char[] value = this.value;)

А char - это число. Проще говоря, вы сравниваете код символа со своим числом
Протестировать легко

Возьмите свою строку 1223242434262445262644283 и выведите indexOf(49) - это символ единицы
Получите 0 - индекс в строке

public static void main(String[] args) {
        String str = "1223242434262445262644283";
        System.out.println(str.indexOf(50)); //1, потому что '2' == 50
    }


А для того, чтобы получить индекс подстроки, нужно max привести к строке
public static void main(String[] args) {
        String str = "1223242434262445262644283";
        System.out.println(str.indexOf("23")); //2 - здесь работает другая реализация метода indexOf
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы