2013-09-12 2 views
-1

Я пытаюсь запрограммировать очень простую 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(); 


} 
} 

ответ

0

ИМО вы должны поддерживать многомерный массив для лучшего читаемости кода

, который int[3][3] вместо 3-х int[3]. Ниже моя попытка

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"); 
    } 
} 
0

при условии, что вы прочитали значение в массив, следующий код будет работать для всех комбинаций, которые могли бы решить магический квадрат

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..!!"); 
    } 
Смежные вопросы