如何避免在此代码中使方法和变量成为静态的?

How do I avoid making methods and variables static in this code?

提问人:Arson1st 提问时间:1/25/2023 更新时间:1/25/2023 访问量:63

问:

我正在解决我的 java 课程过去的考试,我正在为其中之一而苦苦挣扎。我一直得到错误的结果,我认为这是因为所有类和实例变量都是静态的。如何避免使它们静止?此外,这个问题基本上希望您找到 args[1] 中给出的位置的相同字母,如果它们靠近给定位置,请将它们转换为“S”(如果需要,参数是“K,K,K,Y-K,Y,M,M-K,Y,Y,Y 2,1 S”)

public class MatrixRefill {
    public static String[][] matrix;
    public static int rows;
    public static int cols;
    public static String enemy;      
    public static String target;        
    public static void main(String[] args) {
        target = args[2];
        rows = Integer.parseInt(args[1].substring(0,1));
        cols = Integer.parseInt(args[1].substring(2));
        matrix = matrixCreator(args[0]);
        enemy = matrix[rows][cols];
        recursive(rows, cols, target);
        printer(matrix);
    }
    public static String[][] matrixCreator(String mx) {
        int ro = 0;
        int co = 0;
        for (int i = 0; i < mx.length(); i++) {
            if (mx.substring(i,i+1).equals(","))
                co++;
            if (mx.substring(i,i+1).equals("-"))
                ro++;
        }
        String[][] matriks = new String[ro+1][co/3+1];
        ro = 0;
        co = 0;
        for (int j = 0; j < mx.length(); j++) {
            if (mx.substring(j,j+1).equals(","))
                co++;
            else if (mx.substring(j,j+1).equals("-")) {
                ro++;
                co = 0;
            }
            else
                matriks[ro][co] = mx.substring(j,j+1);
        }
        return matriks;
    }   
    public static void recursive(int row, int col, String target) {
        if (valid(row,col)) {
            recursive(row+1,col, target);
            recursive(row,col+1, target);
            recursive(row,col-1, target);
            recursive(row-1,col, target);
            matrix[row][col] = target;
        }
    }
    public static boolean valid(int row, int col) {
        boolean result = false;
        if (row >= 0 && row < matrix.length && col >= 0 && col < matrix[row].length)
            if (matrix[row][col] == enemy)
                result = true;
        return result;
    }
    public static void printer(String[][] owo) {
        for(int i = 0; i < owo.length; i++) {
            for(int j = 0; j < owo[i].length; j++) {
                System.out.print(owo[i][j]);
                if(j < owo[i].length - 1)
                    System.out.print(" ");
            }
            System.out.println();
        }
    }   
}
Java 方法 静态

评论


答:

1赞 WJS 1/25/2023 #1

从方法和实例字段中删除 static 关键字。但是要从内部调用它们,您需要创建一个包含类(在本例中为包含方法的类),并使用它来调用其他方法。我有时所做的是创建一个实例方法(即非静态方法)并调用它来启动该过程。然后,我将把所有主要的东西都放在那个方法中。下面是一个示例。maininstancemain

    public static void main(String[] args) {
        MatrixRefill mr = new MatrixRefill();
        mr.start();
    }
    public void start() {
        target = args[2];
        rows = Integer.parseInt(args[1].substring(0,1));
        cols = Integer.parseInt(args[1].substring(2));
        matrix = matrixCreator(args[0]);
        enemy = matrix[rows][cols];
        recursive(rows, cols, target);
        printer(matrix);
    }
    // rest of code here
}

通过将 IN 中的内容放入方法中,您可以调用其他实例方法并访问实例字段,而无需使用对类的引用来限定它们(即在本例中,前缀为mainstartmr.)

评论

0赞 andrewJames 1/25/2023
"创建一个包含类的实例“——作为一个完全的初学者,我记得我花了一段时间才真正融入这个概念(及其更广泛的含义)。