我正在开发一款小游戏,用户必须选择5个字符中的1个(S,M,A,R或T)并将其插入5x5 2d阵列。如果用户输入了无效的数字或字符,程序会说它是无效的字符并且不插入它。除了输入正确字符的字符之外,所有这些字符都适用,但它仍然显示为无效字符。
import java.util.Scanner;
class program{
public static void main(String[] args){
char[][] table = new char[5][5];
table[0][0] = 'S';
table[0][1] = 'M';
table[0][2] = 'A';
table[0][3] = 'R';
table[0][4] = 'T';
table[1][1] = 'T';
table[1][2] = 'S';
table[1][3] = 'M';
table[2][2] = 'R';
table[2][4] = 'S';
table[3][1] = 'S';
table[3][2] = 'M';
table[4][2] = 'T';
table[4][3] = 'S';
int rows = 5;
int columns = 5;
for(int k = 0; k>=0; k++){
for(int i = 0; i < rows; i++){
for(int j = 0; j < columns; j++){
System.out.print(table[i][j] + " ");
}
System.out.println();
}
System.out.println("Enter a row (1-5): ");
Scanner scRow = new Scanner(System.in);
int m = scRow.nextInt();
System.out.println("Enter a column (1-5): ");
Scanner scCol = new Scanner(System.in);
int n = scCol.nextInt();
System.out.println("Enter a letter (S, M, A, R or T): ");
Scanner scChar = new Scanner(System.in);
char c = scChar.next().charAt(0);
if (m < 1 || m > 5){
System.out.println("Invalid: Enter a valid row. ");
}
if (n < 1 || n > 5){
System.out.println("Invalid: Enter a valid column. ");
}
if (c != 'S' || c != 'M' || c != 'A' || c != 'R' || c != 'T'){
System.out.println("Invalid: Enter a valid character. ");
}
table[(m-1)][(n-1)] = c;
}
}
}
我意识到它与我的if语句有关,但我不确定如何更改if语句以获得预期的结果。
Example output:
S M A R T
T S M
R S
S M
T S
Enter a row (1-5): **3**
Enter a column (1-5): **2**
Enter a letter (S, M, A, R or T): **A**
Invalid: Enter a valid character.
另一个问题,如果有人可以帮助我,那就是创建一个结束语句,用户可以完成2d阵列,然后恭喜你,你知道了。为此,用户必须将S M A R和T在任意方向上以5个字符的行对齐。
感谢您花时间阅读本文!
答案 0 :(得分:2)
您需要将if语句中的||
更改为&&
。或者,您可以将!=
更改为==
。
现在,如果您输入S
,则第一次检查通过,因为该字符等于S
,但所有后续检查都失败。
您可以检查该字符不在您的有效字符集中(使用&&
)。
if(c!='S' && c!='M' && c!='A' && c!='R' && c!='T')
或者,您可以使用==
和||
检查输入的字符是 您的有效字符集。
if(c=='S' || c=='M' || c=='A' || c=='R' || c=='T')
编辑:
要检查结束条件,您需要遍历每一列和每一行以查看是否有任何重复字符。我假设您不需要检查对角线。
static boolean checkEndCondition(char[][] table){
return checkRows(table) && checkColumns(table);
}
static boolean isValidCharacter(char c){
return c=='S' || c=='M' || c=='A' || c=='R' || c=='T';
}
static boolean checkRows(char[][] table){
HashSet<Character> hashset = new HashSet<Character>();
for(int y=0;y<table.length;y++){
for(int x=0;x<table[0].length;x++){
if(isValidCharacter(table[y][x]))
hashset.add(table[y][x]);
else
return false;
}
if(hashset.size()!=5)
return false;
hashset.clear();
}
return true;
}
我在这里使用一个hashset。还有其他解决方案,你只需要一些检查没有字符重复的方法。我留给你实施checkColumns
。