-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Lab5 Code Review #2
Comments
首先,请同学们阅读学习一下童仲毅助教的代码:github.com/java-a/lab5/issues/1。 |
接下来是一段同学的代码: import java.util.Scanner;
public class Tic_tac_toe1 {
public static void main(String[] args) {
int[][] Map = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}};
final int left = 10000;
final int right = 1000;
Scanner scanner = new Scanner(System.in);
int j = 0, m , n , input;
//j为偶数,左方先输入;为奇,右先
do {
for (int i = 0; i < Map.length; i++) {
for (int value : Map[i]) {
if (value == left) {
System.out.print("x");
} else if (value == right) {
System.out.print("0");
} else System.out.print(".");
}System.out.println();
}
System.out.println("next move:");
input =scanner.nextInt();
for (m = 0; m < Map.length; m++)
for (n = 0; n < Map[m].length; n++) {
if (Map[m][n] == input) {
if (j % 2 == 0) {
Map[m][n] = left;
j++;
} else {
Map[m][n] = right;
j++;
}
}
}
} while (j <=9);
}
} 阅读代码并回答以下2个问题:
答案:
2.1这段代码中的 left 和 right 是作什么用的? 2.2 这种写法好不好?会出现bug吗?
这种写法的缺点就在于会出现这样的bug,不过可以通过判断输入的数字范围来避免出现bug。 2.3 是什么原因使得这个同学采取了这种方法?可以怎样修改?
这段代码最大的区别就在于使用了 最后,这段代码除去没做全附加功能和存在一个bug的问题之外,是一段写得相当不错的代码。代码中最精彩的地方是条件判断的部分,非常简介有力,没有冗余,希望同学们仔细分析一下这段代码的运行逻辑。 |
最后,我们来试着提升一下下面这段代码: import javax.swing.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
char[][] plate;
plate = new char[3][3];
boolean player = true;
int i = 0 , j = 0 , sum = 1;
int x = 0 , o = 0;
while (i < 3){
while (j < 3){
plate[i][j] ='.';
j++;
}
j = 0;
i++;
}
i = 0;
j = 0;
while (i < 3){
while (j < 3){
System.out.print(plate[i][j]);
j++;
}
j = 0;
i++;
System.out.print('\n');
}
System.out.println("开始游戏");
while (sum > 0){
String data = JOptionPane.showInputDialog("下一步行动位置(行列数)");
String first = data.substring(0, 1);
String second = data.substring(1, 2);
int m = Integer.parseInt(first) - 1;
int n = Integer.parseInt(second) - 1;
if (m > 2 || n > 2) {
System.out.println("error");
continue;
}else{
if (plate[m][n] == '.'){
if (player == true){
plate[m][n] = 'X';
}else {
plate[m][n] = 'O';
}
}else{
System.out.println("error");
continue;
}
}
i = 0;
j = 0;
while (i < 3){
while (j < 3){
System.out.print(plate[i][j]);
j++;
}
j = 0;
i++;
System.out.print('\n');
}
System.out.print("当前步数:");
System.out.println(sum);
player =!player;
}
}
}
while (i < 3){
while (j < 3){
plate[i][j] ='.';
j++;
}
j = 0;
i++;
} 2.代码中出现了大量的 答案
1.1. 下面这段代码(第一个while循环)做了什么? 1.2. 可以怎样提升一下? char[][] plate = new char[][]{{'.','.','.'}, {'.','.','.'}, {'.','.','.'}}; 2 这道题比较简单,大部分同学也回答对了。i 和 j 的作用是计数,可以通过改用for循环来避免出现大量的 |
回答文档提交:请同学们将所有的回答写在同一个文档中,并以学号+姓名命名。如 |
在 Code Review 环节,同学们将阅读助教和其他同学的代码,发现他人代码中的优缺点,并和自己的代码作比较,来扩宽视野,提升自己的代码水平。
这个环节中,我们要求同学们写下一些体会、回答一些问题。请同学们将所有的回答写在同个一文档中,并以学号+姓名命名。如
16302010002李云帆.txt
,16302010063郭涵青.docx
等。并上传之ftpWORK_UPLOAD
目录下的CodeReview
目录下的lab5
目录中。The text was updated successfully, but these errors were encountered: