如何使此数组乘法表起作用

时间:2013-04-18 22:44:12

标签: java arrays multiplication

乘法表分配

我正在尝试分配用户输入数组大小并添加数字1 - 数组的大小,然后打印出列和行的数组,但我认为我没有做到这一点:

import java.util.Scanner;

public class  MultTable
{
    public static int[]rows;
    public static int[]cols;

    public static void main (String args[])
    {
        intro();
        getRows();
        getCols();
        fillRows();
        fillCols();
        printTable();
    }

    public static void intro()
    {
        System.out.print("Welcome to the Multiplication Table program!");
    }

    public static void getRows()
    {
        Scanner input=new Scanner (System.in);
        System.out.print("\nEnter number of row:");
        int sizerow=input.nextInt();
        int rows[]=new int[sizerow];
    }

    public static void getCols()
    {
        Scanner input=new Scanner(System.in);
        System.out.print("Enter number of columns:");
        int sizecol=input.nextInt();
        int cols[]=new int[sizecol];
    }

    public static void fillRows()
    {
        for(int i=1;i<=rows.length;i++)
        {
            int rows[]=new int[i];
        }
    }

    public static void fillCols()
    {
        for(int j=0;j<cols.length;j++)
        {
            int cols[]=new int[j];
        }
    }

    public static void printTable()
    {
        System.out.print("\n\nHere is your %dx%d multiplication table:");
        System.out.print(cols);
        System.out.print("--------");
        for(int i=1; i<=rows.length;i++)
        {
            for(int j=1;j<=cols.length;j++)
            {
                System.out.print(rows[i]*cols[j]);
            }
        }
    }
}

一直说:

  

MultTable.main(MultTable.java:13)中的MultTable.fillRows(MultTable.java:41)中的线程“main”java.lang.NullPointerException中的异常

1 个答案:

答案 0 :(得分:0)

此代码存在一些问题。首先,您获得的异常是因为当您尝试访问rows中的lengthfillRows()为空。

for(int i=1;i<=rows.length;i++)
               ^^^^

这是因为在int rows[]=new int[sizerow];中使用getRows()时,它正在初始化一个新的局部变量,只对getRows()函数可见。您可能希望改为rows = new int[sizerow];。这将初始化上面声明的成员变量。同样对于cols。

fillRows()fillCols()的循环中正在进行类似的错误分配。对于那些人,你可能想要做rows[i] = i + 1;之类的事情。

另外,仔细检查所有循环的边界。其中一些从1开始,有些为0.其中一些使用<= length,一些< length。你可能想从0开始并在所有这些上使用< length