Java 初学者问题:虽然3x3数组里填入随机数的程式有问题,但可以执行,求改写.

1个回答

  • 你的代码逻辑基本是对的,但是结构很混乱,你应该把一个大问题拆分为很多小问题,分别解决,就会很清晰了,我按你的思路改了程序,但是你那个point我没弄明白,如果99次之后怎么办不是很明确,所以我干脆无视了public class RandomInt {

    private static int[] randomNumArray = null;

    private static int[][] box = null;

    // record how many numbers has been put into the box

    private static int count;

    private static void initRandomArray() {

    randomNumArray = new int[100];

    for (int i = 0; i < 100; i++) {

    randomNumArray[i] = (int) (Math.random() * 9 + 1);

    }

    }

    private static void initBox(Scanner scan) {

    box = new int[3][3];

    while (count < 9) {

    System.out.println("You are choosing a location for the random number: " + randomNumArray[count]);

    int row;

    do {

    System.out.println("Please input a row number: (from 0 to 2)");

    row = scan.nextInt();

    } while (!checkRowAvailable(row));

    int column;

    do {

    System.out.println("Please input a column number: (from 0 to 2)");

    column = scan.nextInt();

    } while (!checkColumnAvailable(column));

    if (checkPutAvailable(row, column)) {

    box[row][column] = randomNumArray[count];

    System.out.println("You have put a random number at the location of row: " + row + ", column: " + column);

    printBox();

    count++;

    }

    }

    }

    private static boolean checkRowAvailable(int row) {

    if (row < 0 || row > 2) {

    System.out.println("It should be a legal row number. (from 0 to 2)");

    return false;

    }

    return true;

    }

    private static boolean checkColumnAvailable(int column) {

    if (column < 0 || column > 2) {

    System.out.println("It should be a legal column number. (from 0 to 2)");

    return false;

    }

    return true;

    }

    private static boolean checkPutAvailable(int row, int column) {

    if (box[row][column] != 0) {

    System.out.println("The location you chose has been occupied already, please ipnut again.");

    return false;

    }

    return true;

    }

    private static void printBox() {

    for (int i = 0; i < 3; i++) {

    for (int j = 0; j < 3; j++) {

    System.out.print(box[i][j]);

    if (j < 2) {

    System.out.print(" | ");

    }

    }

    System.out.println();

    }

    }

    private static void playGame(Scanner scan) {

    count = 0;

    initRandomArray();

    initBox(scan);

    }

    public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);

    playGame(scan);

    while (true) {

    System.out.println("nDo you want to continue? (y/n)");

    String s = scan.next();

    if ("y".equalsIgnoreCase(s)) {

    System.out.println();

    playGame(scan);

    } else if ("n".equalsIgnoreCase(s)) {

    System.out.println("Good Bye!");

    break;

    }

    }

    scan.close();

    }

    }