Как бы я изменил значение объекта при вызове статического метода из другого класса? - PullRequest
0 голосов
/ 29 октября 2018

В этой задаче на практике создается квадратная матрица, заполненная нулями и единицами. Вы можете переворачивать значения (например, 0 становится 1, а 1 становится 0) в прямоугольнике любого размера, если самый верхний угол прямоугольника равен [0, 0] в матрице. Конечная цель - найти, сколько раз вы должны перевернуть значения, чтобы получить все значения матрицы как 0.

Если вам нужно более подробное объяснение, перейдите к http://usaco.org/index.php?page=viewproblem2&cpid=689,, но это основной набросок.

Это мой код:

import java.io.*;
import java.util.*;

public class CowTip {

    static int[][] mat;

    public static void main( String[] args) throws IOException, InterruptedException{

        Scanner scan = new Scanner(new File("cowtip.in"));

        int n = scan.nextInt();
        scan.nextLine();

        mat = new int[n][n];

        for (int x = 0; x < n; x++) {
            String str = scan.nextLine();
            for (int y = 0; y < n; y++) {
                mat[x][y] = Integer.parseInt(str.substring(y,y+1));
            }
        }

        Checker c = new Checker(n-1, n-1);

        int count = 0;
        while (true) {
            c.check();

            for (int x = 0; x <= c.row; x++) {
                for (int y = 0; y <= c.col; y++) {
                    if (mat[x][y] == 0) {
                        mat[x][y] = 1;
                    }
                    else if (mat[x][y] == 1) {
                        mat[x][y] = 0;
                    }
                }
            }
            count++;

            c.check();

            if (c.row == -1 && c.col == -1) {
                break;
            }

        }

        System.out.println(count);

    }

    static class Checker {

        int row;
        int col;

        public Checker(int r, int c) {
            row = r;
            col = c;
        }

        public Checker check() {
            Checker check = new Checker(-1, -1);
            for (int x = mat.length-1; x >= 0; x--) {
                for (int y = mat[x].length-1; y >= 0; y--) {
                    if (mat[x][y] == 1) {
                        check = new Checker(x, y);
                        break;
                    }
                }
                if (check.row != -1 && check.col != -1) {
                    break;
                }
            }
            return check;
        }

    }

}

и это входной файл (с именем cowtip.in):

3
001
111
111

Я исключил свой текущий код отладки, но проблема в том, что значения row и col внутри моего метода check() являются правильными значениями, но всякий раз, когда я вызываю метод check() в моем main значения возвращаются к значениям по умолчанию и не дают правильного ответа, что, в свою очередь, делает цикл бесконечным.

Есть идеи, как это исправить?

РЕДАКТИРОВАТЬ: Я понял это, но спасибо, ребята! На самом деле все было очень просто (c = c.ckeck() вместо c.check()), и, честно говоря, я был очень разочарован, учитывая, что потратил около двух часов, пытаясь отладить это ...

1 Ответ

0 голосов
/ 29 октября 2018

Заменить c.check() на c = c.check();

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