Проверка пользовательского ввода для игры в магический квадрат / Сравнение массивов (определяемых пользователем и определяемых программистом)

Я пытаюсь запрограммировать очень простую игру с магическим квадратом 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..!!");
   }
Другие вопросы по тегам