Loop превращает мое отрицательное целое число положительным в Java - PullRequest
0 голосов
/ 08 февраля 2019

Этот код в Java, кажется, превращает мои отрицательные целые числа в положительные.Я передаю в -9 и 1, и в моем отладчике i в моем первом цикле for начинается с 27 вместо отрицательного 27. Что еще более странно, что если я добавлю строку, чтобы сделать i = -1, он переключаетсямежду -27 и -28 навсегда.Может кто-нибудь сказать мне, почему?

Я передаю -9, 1. Результат должен быть числом, кратным 3, и модулем 5. Я думаю, что -29 соответствует этому критерию.

public static int getIntegerH(int x, int y) {
    System.out.println("The result of the getIntegerH method:");
    boolean flag = true;

    int n = x * 4;  // 36
    int m = x * 3;  // 27

    if (x == y) {
      flag = true;
    }

    if (x < 0 || y < 0) {
        for (int i = -m; i < -n; i++) {
             if (i / 3 == x && i % 5 == y ) {
                  System.out.println(i);
                  flag = false;
              }
        }
    } else if (x > 0 || y > 0) {
        for (int i = m; i < n; i++) {
            if (i / 3 == x && i % 5 == y ) {
                System.out.println(i);
                flag = false;
            }
        }
    }

    if (flag == true) {
        System.out.println("No such number");
    }

    return 0;
}

Ответы [ 2 ]

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

Вот решение для вас, которое может работать с любым делителем или модулем, который вам нравится:

final static int DIV = 3;
final static int MOD = 5;

/** Returns an integer `r` such that `r / DIV = x` and `r % MOD = y`, else returns 0 */
public static int getIntegerH(int x, int y) {
    if (y >= MOD) {
        System.out.println(
                "getIntegerH(" + x + ", " + y + ") -> none; impossible to have a remainder of " + y
                        + " when the modulo is " + MOD);
        return 0;
    }

    // determine the min and max numbers inclusive where n / DIV = x
    int min = x > 0 ? x * DIV : x * DIV - DIV + 1;
    int max = x > 0 ? x * DIV + DIV - 1 : x * DIV;

    // get the min and max values of the mod for this
    int minMod = min % MOD;
    int maxMod = max % MOD;

    if ((MOD > DIV) && (y < minMod || y > maxMod)) {
        System.out
                .println("getIntegerH(" + x + ", " + y + ") -> none; there is no number `n` between "
                        + min + " and " + max + " where `n % " + MOD + " = " + y + "`");
        return 0;
    }

    int r = (x > 0) ? min + y - minMod : max + y - maxMod;
    System.out.println("getIntegerH(" + x + ", " + y + ") -> " + r + "; " + r + " / " + DIV + " = ["
            + (r / DIV) + "]; " + r + " % " + MOD + " = [" + (r % MOD) + "]");
    return r;
}
0 голосов
/ 08 февраля 2019

Вы устанавливаете i в минус м

  for (int i = -m; i < -n; i++) {

Если вы передали -9 для x, то m равно -27, а отрицательное -27 равно 27.

В качестве примечания вы также захотите посмотретьна ваше состояние и прирост.Если вы хотите отсчитывать от -27 до -36, вам нужно что-то вроде этого:

  for (int i = m; i >= n; --i ) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...