Java 如何从方法返回二维数组索引?
我正在从这里创建一个tic-tac-toe程序: 我很难找到如何从方法返回数组索引。我想用户输入2个整数,(行,列),并返回该索引,并有char“o”或“x”替换空白对应的索引。 我对java有点陌生,我正在努力以尽可能快和高效的方式学习它,以便在我的课堂上迎头赶上Java 如何从方法返回二维数组索引?,java,arrays,methods,Java,Arrays,Methods,我正在从这里创建一个tic-tac-toe程序: 我很难找到如何从方法返回数组索引。我想用户输入2个整数,(行,列),并返回该索引,并有char“o”或“x”替换空白对应的索引。 我对java有点陌生,我正在努力以尽可能快和高效的方式学习它,以便在我的课堂上迎头赶上 import java.util.Scanner; public class ticTacToe{ public static Scanner in = new Scanner(System.in); priva
import java.util.Scanner;
public class ticTacToe{
public static Scanner in = new Scanner(System.in);
private static int r, c;
private static char[][] board = new char[3][3];
//create a 3x3 array of characters
public static void main( String[] args ) {
Scanner in = new Scanner(System.in);
displayBoard();
do{
// user inputs two numbers as indexes
//turn index into "o"
//prompt other user to make move, repeat with "x"
}while(checkLoser());
}
public static void displayBoard() {
System.out.println(" 0 " + board[0][0] + "|" + board[0][1] + "|" + board[0][2]);
System.out.println(" --+-+--");
System.out.println(" 1 " + board[1][0] + "|" + board[1][1] + "|" + board[1][2]);
System.out.println(" --+-+--");
System.out.println(" 2 " + board[2][0] + "|" + board[2][1] + "|" + board[2][2]);
System.out.println(" 0 1 2 ");
}
public static int[] getArrayIndex(){
System.out.println("'O'. Choose your Row...(row, column)");
int r = in.nextInt();
int c = in.nextInt();
return new int[] {r,c};
}
public static void userMove(int[][] ){
board[r][c] = 'O';
}
public static boolean checkLoser(){
if (board[0][0] == board[0][1]){
if (board [0][1] == board[0][2]){
return false;
}
}
else if (board[1][0] == board[1][1]){
if (board [1][1] == board[1][2]){
return false;
}
}
else if (board[2][0] == board[2][1]){
if (board [2][1] == board[2][2]){
return false;
}
}
else if (board[0][0] == board[1][0]){
if (board [1][0] == board[2][0]){
return false;
}
}
else if (board[0][1] == board[1][1]){
if (board [1][1] == board[1][2]){
return false;
}
}
else if (board[0][2] == board[1][2]){
if (board [1][2] == board[2][2]){
return false;
}
}
else if (board[0][0] == board[1][1]){
if (board [1][1] == board[2][2]){
return false;
}
}
else if (board[0][2] == board[1][1]){
if (board [1][1] == board[2][0]){
return true;
}
}else{
return false;
}
}
}
Java实现这一点的方法是定义一个类来保存行和列索引
final class BoardIndex {
final int row;
final int col;
BoradIndex(final int r, final int c) {
this.row = r;
this.col = c;
}
}
然后可以从函数返回它
BoardIndex getIt() {
return new BoradIndex(1, 2);
}
这需要相当多的类型,但许多Java人员更喜欢这种类型的明确性,而不是使用整数数组。Java的方法是定义一个类来保存行和列索引
final class BoardIndex {
final int row;
final int col;
BoradIndex(final int r, final int c) {
this.row = r;
this.col = c;
}
}
然后可以从函数返回它
BoardIndex getIt() {
return new BoradIndex(1, 2);
}
这需要相当多的类型,但许多Java用户更喜欢这种类型的显式,而不是使用整数数组。好吧,为了回答您的问题,因为它是一个二维数组,显然需要返回两个索引(正如您可能想的那样)。由于函数只能返回一个对象,正如您在给定函数时所想的那样:
public static int[] getArrayIndex(){
System.out.println("'O'. Choose your Row...(row, column)");
int r = in.nextInt();
int c = in.nextInt();
return new int[] {r,c};
}
您返回了一个包含两个所需索引的两元素数组。这是你实现它的一种方法。其他形式包括创建一个包含两个int元素的对象并使用它,或者以某种方式将两个变量存储在同一个int中(例如,保持它们的长度为一位数)。
不管怎样,你返回这些指数的方法是正确的。你如何使用这些信息取决于你自己。我想您必须将其存储在一个临时的int数组中,如下所示int[]temp=getArrayIndex()
然后访问每个元素以获得相应的索引
但是,您的代码还存在其他错误,例如忘记在此函数中为参数命名(或者无论如何都不使用此参数):
我建议你检查一下。也许你编译的程序给了你一个错误,你认为这是因为
新的int[]{r,c}
的东西,但是naaah,这是可行的。如果是这样的话,检查一下其他的,那是另外一回事。不过我很乐意帮忙,所以尽管问吧^^ 好吧,为了回答您的问题,因为它是一个二维数组,您显然需要返回两个索引(正如您可能认为的那样)。由于函数只能返回一个对象,正如您在给定函数时所想的那样:
public static int[] getArrayIndex(){
System.out.println("'O'. Choose your Row...(row, column)");
int r = in.nextInt();
int c = in.nextInt();
return new int[] {r,c};
}
您返回了一个包含两个所需索引的两元素数组。这是你实现它的一种方法。其他形式包括创建一个包含两个int元素的对象并使用它,或者以某种方式将两个变量存储在同一个int中(例如,保持它们的长度为一位数)。
不管怎样,你返回这些指数的方法是正确的。你如何使用这些信息取决于你自己。我想您必须将其存储在一个临时的int数组中,如下所示int[]temp=getArrayIndex()
然后访问每个元素以获得相应的索引
但是,您的代码还存在其他错误,例如忘记在此函数中为参数命名(或者无论如何都不使用此参数):
我建议你检查一下。也许你编译的程序给了你一个错误,你认为这是因为
新的int[]{r,c}
的东西,但是naaah,这是可行的。如果是这样的话,检查一下其他的,那是另外一回事。不过我很乐意帮忙,所以尽管问吧^^ 您是在谈论getArrayIndex()方法吗?如果是这样的话,那么目前的方式有什么问题?毫无疑问,你可能会发现使用9个元素的标准阵列比使用二维阵列更容易编写Tictatcoe游戏。嗨,贾斯汀。您说过要从方法返回数组索引。数组索引只是一个int,从一个函数返回索引(在该函数中您得到了索引)就是简单地将输入返回给该方法。你的描述可能会混淆。数组具有索引和值多维数组也具有数组值int[]foo={{0,1,2},{3,1,4},{1,1,2}
是一个包含9个条目的二维数组。当访问二维数组中的值时,即首先引用的是foo[]的索引1处的数组,然后是foo[1]
的索引2处的int,即4。您在谈论getArrayIndex()方法吗?如果是这样的话,那么目前的方式有什么问题?毫无疑问,你可能会发现使用9个元素的标准阵列比使用二维阵列更容易编写Tictatcoe游戏。嗨,贾斯汀。您说过要从方法返回数组索引。数组索引只是一个int,从一个函数返回索引(在该函数中您得到了索引)就是简单地将输入返回给该方法。你的描述可能会混淆。数组具有索引和值多维数组也具有数组值int[]foo={{0,1,2},{3,1,4},{1,1,2}
是一个包含9个条目的二维数组。当访问二维数组中的值时,即首先引用的是foo[]的索引1处的数组,然后是foo[1]
的索引2处的int,通常我同意,但是这门单独的课程对像OP这样的初学者来说并没有多大帮助。@Robert我必须承认,我有点匆忙地发布了这个答案,而没有真正理解OP“遇到了什么问题”。因此,我不确定我的答案中应该添加哪些内容以使其更有用。OP提供的更多信息会有帮助。一般来说,我同意,但这门单独的课程对OP这样的初学者来说没有多大帮助。@Robert我必须承认,我在没有真正理解OP“遇到问题”的原因的情况下,匆忙发布了这个答案。因此,我不确定我的答案中应该添加哪些内容以使其更有用。OP提供的更多信息将很有帮助。