Проверка пользовательского ввода для игры в магический квадрат / Сравнение массивов (определяемых пользователем и определяемых программистом)
Я пытаюсь запрограммировать очень простую игру с магическим квадратом 3х3, используя массивы.
Моя программа трижды попросит пользователя ввести три числа (для верхнего ряда, среднего ряда, нижнего ряда), и затем будут отображены значения. Проблема в том, что я пытаюсь заставить мою программу проверить правильность введенных пользователем значений.
Я не уверен, как я это сделаю; Я думал о том, чтобы просто объявить фиксированные значения и просто сделать сравнения / использовать условные операторы для сравнения входных данных пользователя с этими постоянными значениями (объясняет массивы d, e, & f в моем коде ниже), но я также думал, что это не совсем полностью правильно, поскольку существует много возможных значений, которые смогут составить магический квадрат, кроме значений, которые я собираюсь объявить, и, конечно, я не хотел бы быть таким избыточным в моем коде.
Я еще не очень знаком с массивами, я новичок в Java. Я не уверен, можно ли задавать этот вопрос здесь, но я надеюсь, что кто-то еще ответит. Это довольно важно, так как это школьный проект.
Я знаю, что цифры должны иметь в общей сложности 15 по горизонтали, вертикали и диагонали. И я понятия не имею, как это сделать.
Хотя, я полагаю, я бы просто сделал условные заявления (если никто не ответит на мой вопрос выше), так как я только что нашел источник, который имеет все магические квадраты 3x3, так что если кто-то может просто научить меня, как сравнивать определяемые пользователем массивы и массивы, определенные программистом, это было бы неплохо.
Я написал несколько кодов для хранения ввода пользователя.
import java.util.*;
class arrayy
{
public static void main(String args[])
{
int[] a=new int[3];
int[] b=new int[3];
int[] c=new int[3];
int[] d={8,1,6};
int[] e={3,5,7};
int[] f={4,9,2};
Scanner sc=new Scanner(System.in);
System.out.println("Please enter the 3 numbers for the top row: ");
for(int j=0;j<3;j++)
a[j]=sc.nextInt();
System.out.println();
System.out.println("Please enter the 3 numbers for the middle row: ");
for(int j=0;j<3;j++)
b[j]=sc.nextInt();
System.out.println();
System.out.println("Please enter the 3 numbers for the bottom row: ");
for(int j=0;j<3;j++)
c[j]=sc.nextInt();
System.out.println("Your entry: ");
for (int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
for (int i=0;i<a.length;i++)
System.out.print(b[i]+" ");
System.out.println();
for (int i=0;i<a.length;i++)
System.out.print(c[i]+" ");
System.out.println();
System.out.println();
}
}
2 ответа
ИМО, вы должны поддерживать многомерный массив для лучшей читаемости кода
то есть int[3][3]
вместо 3 int[3]
"S. Ниже моя попытка
public static void main(String [] args) {
int[][] input=new int[3][3];
int[][] defined={{8,1,6}, {3,5,7}, {4,9,2}};
Scanner sc=new Scanner(System.in);
//Take input
//Outer loop
for(int i=0; i<3; i++) {
System.out.println("Enter value for Row number - "+(i+1));
//Inner loop
for(int j=0; j<3; j++) {
input[i][j] = sc.nextInt();
}
}
//Compare
boolean matches = true;
for(int i=0; i<3; i++) {
//Inner loop
for(int j=0; j<3; j++) {
if(input[i][j] != defined[i][j]) {
matches = false;
break;
}
}
}
if(matches) {
System.out.println("All matches");
}
else {
System.out.println("No match");
}
}
При условии, что вы прочитали значения в массив, следующий код будет работать для всех комбинаций, которые могут решить магический квадрат
boolean flag = true;
int sum = 0;
int i,j;
for(i=0;i<3;i++){
//for the row wise check
sum=0;
for(j=0;j<3;j++) {
sum+=arr[i][j];
}
if(sum!=15) {
flag=false;
break;
}
//for the column wise check
sum=0;
for(j=0;j<3;j++) {
sum+=arr[j][i];
}
if(sum!=15) {
flag=false;
break;
}
}
//for the diagonal check
sum=0;
for(j=0;j<3;j++) {
sum+=arr[j][j];
}
if(sum!=15) {
flag=false;
}
sum=0;
for(i=0,j=2;j>=0;i++,j--) {
sum+=arr[i][j];
}
if(sum!=15) {
flag=false;
}
if(flag) {
System.out.println("you have cracked it..!!");
} else {
System.out.println("better luck next time..!!");
}