验证魔方游戏的用户输入/比较数组(用户定义和程序员定义)

时间:2013-09-12 12:48:26

标签: java arrays magic-square

我正在尝试使用数组编写一个非常简单的3x3魔方游戏。

我的程序会要求用户每次输入三个数字(对于顶行,中间行,底行),然后显示值。 问题是我正在尝试让我的程序验证用户是否输入了正确的值。

我不确定我会怎么做;我想过简单地声明固定值,只是进行比较/使用条件语句来比较用户的输入和那些常量值(在下面的代码中解释数组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 个答案:

答案 0 :(得分:0)

IMO你应该维护一个多维数组以获得更好的代码可读性

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

答案 1 :(得分: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..!!");
   }