java - 让项目更加OO Java

标签 java arrays loops methods

我制作了一个在同一个程序中运行的 12 x 12 表,但我想将其设为 OO,以便我可以将“public static void main”放在另一个“测试文件”中,并且它仍然会运行正确..我在 OO 方法方面遇到了一些问题,我真的需要帮助...这就是我的代码:

import java.util.Scanner;
import java.util.Arrays;
import java.util.Random;

public class PlayingArea {
    public static void main(String[] args) {
        Random r = new Random();
        Scanner input = new Scanner(System.in);
        System.out.println("How many regions would you like (2- 4)");
        int region = input.nextInt();
        String letters = "";
        while(letters.length() < 2) {
            if (region == 4) {
                letters= "EFGH";
            }
            if (region == 3) {
                letters= "EFG";
            } else if (region == 2) {
                letters= "EF";
            } else if (region < 2) {
                System.out.println("You inputed a wrong value, try again...");
            }
        }
        int N = letters.length();
        char [][] letter = new char[12][12];

        for (int j = 0; j < letter.length; j++) {

            for(int i=0; i < letter.length; i++) {
                letter[i][j] = letters.charAt(r.nextInt(N)) ;
            }
        }

        for (char[] letterRow : letter)
            System.out.println(Arrays.toString(letterRow));
    }
}

最佳答案

如果您对 java 比较陌生,那么您就做得很好了。请注意,如果您输入 2-4 之外的数字,程序中就会出现无限循环(已在下面修复)。

首先,您的类 PlayingArea 需要一些成员变量来表示状态。

第一个是字符串字母(EF 或 EFG 或 EFGH),它是通过下面代码中的构造函数初始化的。

第二个是 char[][] grid(从代码中的 letter 重命名),它在 populate() 方法,将字母放入网格中。

另一种方法 gridAsString() 就是这样做的。

如果您愿意,现在可以轻松地将public static void main移动到另一个类。

玩得开心。

public class PlayingArea {
    private String letters;
    private char[][] grid;

    public PlayingArea(String letters) {
        this.letters = letters;
    }

    public void populate() {
        int n = letters.length();
        grid = new char[12][12];

        Random r = new Random();
        for (int j = 0; j < grid.length; j++) {
            for (int i = 0; i < grid.length; i++) {
                grid[i][j] = letters.charAt(r.nextInt(n));
            }
        }

    }

    public String gridAsString() {
        StringBuilder sb = new StringBuilder();
        for (char[] letterRow : grid) {
            sb.append(Arrays.toString(letterRow)).append('\n');
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("How many regions would you like (2- 4)");
        String letters = "";
        while (letters.length() < 2) {
            int region = input.nextInt();
            if (region == 4) {
                letters = "EFGH";
            } else if (region == 3) {
                letters = "EFG";
            } else if (region == 2) {
                letters = "EF";
            } else {
                System.out.println("You inputed a wrong value, try again...");
            }
        }
        PlayingArea playingArea = new PlayingArea(letters);
        playingArea.populate();
        System.out.println(playingArea.gridAsString());
    }
}

关于java - 让项目更加OO Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985215/

相关文章:

ios - 在 iOS 中使用其数据时处理数组更新

c++ - 如何在 C++ 中的 while 循环中存储先前的迭代?

Java计算器如何制作退格键

java - 如何禁用 MapStruct 中源映射中的字段?

java - 查找谁(什么)杀死了我的进程

c - 如何将字符串转换为二维数组

java - 如果我已经有 .jar 可执行文件,如何使用谷歌云虚拟机实例作为服务器?

javascript - 如何洗牌一个NodeList

python - 如何以更优雅的 Pythonic 方式组织此循环

java - 如何在我的主要 Activity 中循环一段代码?