Threes字符版
来源:互联网 发布:国外的知乎quora 编辑:程序博客网 时间:2024/06/06 01:01
慢慢优化,看看自己的重构能力。
第一版渣渣如下:
public class Threes { public static final int SIZE = 4; public static int[][] matrix = new int[SIZE][SIZE]; public static int step = 0; public static void main(String[] args) throws Exception { init(); printMatrix(matrix); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String line = ""; while ((line = reader.readLine()) != null) { boolean flag = false; if ("a".equals(line)) { flag = moveRowBackward(); } else if ("d".equals(line)) { flag = moveRowForward(); } else if ("w".equals(line)) { flag = moveColBackward(); } else if ("s".equals(line)) { flag = moveColForward(); } else { System.out.print("INVALID INPUT!!!input:"); continue; } if (flag) { addNumber(line); } else { System.out.print("CANNOT MOVE!!!input:"); continue; } step++; printMatrix(matrix); } } private static void init() { for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { matrix[i][j] = (int) (Math.random() * 3); } } } private static void printMatrix(int[][] mat) { System.out.println("---------------------"); for (int i = 0; i < SIZE; i++) { System.out.print("|"); for (int j = 0; j < SIZE; j++) { System.out.print(formatNumber(mat[i][j]) + "|"); } System.out.println(); } System.out.println("--------------------- step:" + step); System.out.print("input:"); } private static String formatNumber(int number) { String result = String.valueOf(number); if ("0".equals(result)) { result = " "; } for (int i = result.length(); i < 4; i++) { result = " " + result; } return result; } private static void addNumber(String move) { int number = 1 + (int) (Math.random() * 2); if ("a".equals(move)) { int pos = (int) (Math.random() * SIZE); while (matrix[pos][SIZE - 1] != 0) { pos = (int) (Math.random() * SIZE); } matrix[pos][SIZE - 1] = number; } else if ("d".equals(move)) { int pos = (int) (Math.random() * SIZE); while (matrix[pos][0] != 0) { pos = (int) (Math.random() * SIZE); } matrix[pos][0] = number; } else if ("w".equals(move)) { int pos = (int) (Math.random() * SIZE); while (matrix[SIZE - 1][pos] != 0) { pos = (int) (Math.random() * SIZE); } matrix[SIZE - 1][pos] = number; } else if ("s".equals(move)) { int pos = (int) (Math.random() * SIZE); while (matrix[0][pos] != 0) { pos = (int) (Math.random() * SIZE); } matrix[0][pos] = number; } } private static boolean moveRowBackward() { boolean flag = false; for (int row = 0; row < SIZE; row++) { for (int i = 0; i < SIZE - 1; i++) { if (canCombine(matrix[row][i], matrix[row][i + 1])) { flag = true; matrix[row][i] = matrix[row][i] + matrix[row][i + 1]; for (int j = i + 1; j < SIZE - 1; j++) { matrix[row][j] = matrix[row][j + 1]; } matrix[row][SIZE - 1] = 0; break; } } } return flag; } private static boolean moveRowForward() { boolean flag = false; for (int row = 0; row < SIZE; row++) { for (int i = SIZE - 1; i > 0; i--) { if (canCombine(matrix[row][i], matrix[row][i - 1])) { flag = true; matrix[row][i] = matrix[row][i] + matrix[row][i - 1]; for (int j = i - 1; j > 0; j--) { matrix[row][j] = matrix[row][j - 1]; } matrix[row][0] = 0; break; } } } return flag; } private static boolean moveColBackward() { boolean flag = false; for (int col = 0; col < SIZE; col++) { for (int i = 0; i < SIZE - 1; i++) { if (canCombine(matrix[i][col], matrix[i + 1][col])) { flag = true; matrix[i][col] = matrix[i][col] + matrix[i + 1][col]; for (int j = i + 1; j < SIZE - 1; j++) { matrix[j][col] = matrix[j + 1][col]; } matrix[SIZE - 1][col] = 0; break; } } } return flag; } private static boolean moveColForward() { boolean flag = false; for (int col = 0; col < SIZE; col++) { for (int i = SIZE - 1; i > 0; i--) { if (canCombine(matrix[i][col], matrix[i - 1][col])) { flag = true; matrix[i][col] = matrix[i][col] + matrix[i - 1][col]; for (int j = i - 1; j > 0; j--) { matrix[j][col] = matrix[j - 1][col]; } matrix[0][col] = 0; break; } } } return flag; } private static boolean canCombine(int a, int b) { if (a == 0 || b == 0) { return true; } else if (a + b == 3) { return true; } else if (a == b && a + b > 4) { return true; } else { return false; } }}
第二版
package threes;public class Matrix { private int[][] matrix; private int size; private int step; public Matrix(int size) { this.size = size; this.step = 0; init(); } private void init() { matrix = new int[size][size]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { matrix[i][j] = (int) (Math.random() * 3); } } } public void print() { System.out.println("---------------------"); for (int i = 0; i < size; i++) { System.out.print("|"); for (int j = 0; j < size; j++) { System.out.print(ThreeUtils.formatNumber(matrix[i][j]) + "|"); } System.out.println(); } System.out.println("--------------------- step:" + step); } public boolean moveRowBackward() { boolean flag = false; for (int row = 0; row < size; row++) { for (int i = 0; i < size - 1; i++) { if (ThreeUtils.canCombine(matrix[row][i], matrix[row][i + 1])) { flag = true; matrix[row][i] = matrix[row][i] + matrix[row][i + 1]; for (int j = i + 1; j < size - 1; j++) { matrix[row][j] = matrix[row][j + 1]; } matrix[row][size - 1] = 0; int number = getRandomNumber(); int pos = (int) (Math.random() * size); while (matrix[pos][size - 1] != 0) { pos = (int) (Math.random() * size); } matrix[pos][size - 1] = number; break; } } } return flag; } public boolean moveRowForward() { boolean flag = false; for (int row = 0; row < size; row++) { for (int i = size - 1; i > 0; i--) { if (ThreeUtils.canCombine(matrix[row][i], matrix[row][i - 1])) { flag = true; matrix[row][i] = matrix[row][i] + matrix[row][i - 1]; for (int j = i - 1; j > 0; j--) { matrix[row][j] = matrix[row][j - 1]; } matrix[row][0] = 0; int number = getRandomNumber(); int pos = (int) (Math.random() * size); while (matrix[pos][0] != 0) { pos = (int) (Math.random() * size); } matrix[pos][0] = number; break; } } } return flag; } public boolean moveColBackward() { boolean flag = false; for (int col = 0; col < size; col++) { for (int i = 0; i < size - 1; i++) { if (ThreeUtils.canCombine(matrix[i][col], matrix[i + 1][col])) { flag = true; matrix[i][col] = matrix[i][col] + matrix[i + 1][col]; for (int j = i + 1; j < size - 1; j++) { matrix[j][col] = matrix[j + 1][col]; } matrix[size - 1][col] = 0; int number = getRandomNumber(); int pos = (int) (Math.random() * size); while (matrix[size - 1][pos] != 0) { pos = (int) (Math.random() * size); } matrix[size - 1][pos] = number; break; } } } return flag; } public boolean moveColForward() { boolean flag = false; for (int col = 0; col < size; col++) { for (int i = size - 1; i > 0; i--) { if (ThreeUtils.canCombine(matrix[i][col], matrix[i - 1][col])) { flag = true; matrix[i][col] = matrix[i][col] + matrix[i - 1][col]; for (int j = i - 1; j > 0; j--) { matrix[j][col] = matrix[j - 1][col]; } matrix[0][col] = 0; int number = getRandomNumber(); int pos = (int) (Math.random() * size); while (matrix[0][pos] != 0) { pos = (int) (Math.random() * size); } matrix[0][pos] = number; break; } } } return flag; } protected boolean canMove() { return true; } protected int getRandomNumber() { int number = 1 + (int) (Math.random() * 3); return number; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getStep() { return step; } public void setStep(int step) { this.step = step; }}package threes;import java.io.BufferedReader;import java.io.InputStreamReader;public class Threes { public static final int SIZE = 4; public static void main(String[] args) throws Exception { Matrix matrix = new Matrix(SIZE); matrix.print(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String line = ""; System.out.print("input:"); while ((line = reader.readLine()) != null) { boolean flag = false; if ("a".equals(line)) { flag = matrix.moveRowBackward(); } else if ("d".equals(line)) { flag = matrix.moveRowForward(); } else if ("w".equals(line)) { flag = matrix.moveColBackward(); } else if ("s".equals(line)) { flag = matrix.moveColForward(); } else { System.out.print("INVALID INPUT!!!input:"); continue; } if (!flag) { System.out.print("CANNOT MOVE!!!input:"); continue; } matrix.print(); System.out.print("input:"); } }}package threes;public class ThreeUtils { public static String formatNumber(int number) { String result = String.valueOf(number); if ("0".equals(result)) { result = " "; } for (int i = result.length(); i < 4; i++) { result = " " + result; } return result; } public static boolean canCombine(int a, int b) { if (a == 0 || b == 0) { return true; } else if (a + b == 3) { return true; } else if (a == b && a + b > 4) { return true; } else { return false; } }}
0 0
- Threes字符版
- Threes
- Surround Threes (凸包模版)
- Threes.js入门篇之2
- Threes.js入门篇之3
- Threes.js入门篇之4
- Threes.js入门篇之5
- Threes.js入门篇之6
- Threes.js入门篇之7
- Threes.js入门篇之8
- Threes.js入门篇之9
- 《Apple 设计奖 2014》出炉,还无辜的《Threes!》一个公道了
- 字符版贪吃蛇
- 成绩单---字符数组版
- 字符
- 字符
- 字符
- 字符
- springMVC实现文件上传
- leetcode202: Happy Number
- 使用Math类操作数据
- sharedPreferencesUtils
- findViewById,ViewHolder,SparseArray<View> viewHolder原理以及效率对比
- Threes字符版
- 十六进制转换
- JAVA 数组类型
- zookeeper3.4.5内存分配
- 两个有序整型数组的交集
- MPAndroidChart之lineChart中的诡异属性
- springmvc 4 返回json数据
- MXNET是这样压榨深度学习的内存消耗的
- android自带数据库SQLiteDatabase基础使用