通过使用二维数组乘以表

时间:2014-12-22 09:39:59

标签: java arrays multidimensional-array

我试图通过使用二维数组来制作1到10的乘法表。当我运行程序时,我得到的每个值都在彼此之下,而不是表格。我得到第一个值为1,所有其他值为0.我也得到了错误 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:11     在summing.main(summing.java:46) 你能给出一些关于算法的提示吗?

public static void main( String[] args) 
{
    Scanner scan = new Scanner( System.in);
    int x,y,z;
    int[][] table = new int[11][11];
    table[0][0] = 0;
    table[0][1] = 1;
    table[0][2] = 2;
    table[0][3] = 3;
    table[0][4] = 4;
    table[0][5] = 5;
    table[0][6] = 6;
    table[0][7] = 7;
    table[0][8] = 8;
    table[0][9] = 9;;
    table[0][10] = 10;  
    table[1][0] = 1;
    table[2][0] = 2;
    table[3][0] = 3;
    table[4][0] = 4;
    table[5][0] = 5;
    table[6][0] = 6;
    table[7][0] = 7;
    table[8][0] = 8;    
    table[9][0] = 9;
    table[10][0] = 10;

    System.out.println( "Start of multiplication\n");

    for (x = 0; x <= 10; x++)
    {
        for (y = 0; y <= 10; y++)
        {
            table[x][y] = table[x][1] * table[y][1];
            System.out.println(table[x][y]);//This line has the error.
        }
        table[x][y] = table[x][1] * table[y][1];
        System.out.print(table[x][y]);  
    }

    System.out.println( "\nEnd of multiplication\n" );
}

4 个答案:

答案 0 :(得分:1)

您看到一系列行而不是值的原因是您的内部for循环使用println,而不是print。内部循环将使用print,然后外部循环将使用println来打破行。

你得到一个越界异常的原因是因为:

for (y = 0; y <= 10; y++)
{
    table[x][y] = table[x][1] * table[y][1];
    System.out.println(table[x][y]);
}
table[x][y] = table[x][1] * table[y][1]; // <======= Here

在循环之后,y具有值11,因此使用它索引到表中将导致越界异常。你根本不需要那条线,也不需要那条线。在内循环之后,你想要的只是:

System.out.println();

...开始新的一行。

Re算法:你实际上不需要一个二维数组(或任何数组)来做到这一点。但是如果你使用它,你不需要用任何东西预先初始化它,因为你有xy。只需将xy的乘积分配给内循环中的相关单元格:

table[x][y] = x * y;
  

我正在尝试制作1到10的乘法表......

然后你的循环边界是错误的,因为你从 0 到10(含)。相反,你需要0(包括)到10(不包括),并在进行乘法时向xy添加一个:

int[][] table = new int[10][10];
// ...
for (x = 0; x < 10; ++x) {
    for (y = 0; y < 10; ++y) {
         // ...
        table[x][y] = (x + 1) * (y + 1);
    }
}

希望这已经足够了,我不想真正为你编写代码,因为你可以通过解决它来了解更多。

答案 1 :(得分:1)

首先,如果不需要从x = 0和y = 0开始循环。 在计算表中的值之后,再次打印所有值 第三个ArrayIndexOutOfBound是因为当y循环完成时,y的值为11,并且在循环结束后你使用了y的那个值。

public static void main( String[] args) 
{
Scanner scan = new Scanner( System.in);
int x,y,z;
int[][] table = new int[11][11];
table[0][0] = 1;
table[0][1] = 1;
table[0][2] = 2;
table[0][3] = 3;
table[0][4] = 4;
table[0][5] = 5;
table[0][6] = 6;
table[0][7] = 7;
table[0][8] = 8;
table[0][9] = 9;;
table[0][10] = 10;  
table[1][0] = 1;
table[2][0] = 2;
table[3][0] = 3;
table[4][0] = 4;
table[5][0] = 5;
table[6][0] = 6;
table[7][0] = 7;
table[8][0] = 8;    
table[9][0] = 9;
table[10][0] = 10;

System.out.println( "Start of multiplication\n");

for (x = 1; x <= 10; x++)
{
    for (y = 1; y <= 10; y++)
    {
        table[x][y] = table[x][0] * table[y][0];

    }
}

System.out.println();

for(x=1;x<=10;x++){
    for(y=1;y<=10;y++){
        System.out.print(table[x][y] + "\t");
    }
    System.out.println("\n");
}

System.out.println( "\nEnd of multiplication\n" );
}    

答案 2 :(得分:0)

如果您无法在代码中收到错误,可以试试这个。但首先尝试使用您的代码作为@ T.J找到解决方案。克劳德说:

public static void main( String[] args) 
{
   // Scanner scan = new Scanner( System.in);
    int x,y;
    int[][] table = new int[11][11];
    table[0][0] = 0;
    table[0][1] = 1;
    table[0][2] = 2;
    table[0][3] = 3;
    table[0][4] = 4;
    table[0][5] = 5;
    table[0][6] = 6;
    table[0][7] = 7;
    table[0][8] = 8;
    table[0][9] = 9;;
    table[0][10] = 10;  
    table[1][0] = 1;
    table[2][0] = 2;
    table[3][0] = 3;
    table[4][0] = 4;
    table[5][0] = 5;
    table[6][0] = 6;
    table[7][0] = 7;
    table[8][0] = 8;    
    table[9][0] = 9;
    table[10][0] = 10;

    int[][] output_table = new int[11][11];

    System.out.println( "Start of multiplication\n");

    for (x = 0; x < 10; x++)
    {
        System.out.println("Table of: "+table[x][0]);
        for (y = 0; y < 10; y++)
        {
            output_table[x][y] = table[0][x] * table[y][0];
            System.out.print(output_table[x][y]+"\t");//This line has the error.
        }

        output_table[x][y] = table[0][x] * table[y][0];
        System.out.println(output_table[x][y]);  
    }

    System.out.println( "\nEnd of multiplication\n" );
}

`

答案 3 :(得分:0)

for(int i = 0;i<11;i++){
table[0][i] = i+1;
    table [i] [0] = i+1;
}

比拥有庞大的声明列表

更有效率