关于数组的一些小问题

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

package Work;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class telephone {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);

        System.out.println("请输入一个大于0小于等于100的整数:");
        int num= sc.nextInt();
        String[][] eng=new String[num][];
        System.out.println("请输入"+num+"行11位的字符");
        for(int i=0;i<num;i++){
            for(int j=0;j<11;j++){
                eng[i][j]=sc.nextLine();
            }
        }
        Map map=new HashMap();
        map.put("a","2");map.put("b","2");map.put("c","2");
        map.put("f","3");map.put("e","3");map.put("d","3");
        map.put("g","4");map.put("h","4");map.put("i","4");
        map.put("j","5");map.put("k","5");map.put("l","5");
        map.put("m","6");map.put("n","6");map.put("o","6");
        map.put("p","7");map.put("q","7");map.put("r","7");map.put("s","7");
        map.put("t","8");map.put("u","8");map.put("v","8");
        map.put("w","9");map.put("x","9");map.put("y","9");map.put("z","9");
        System.out.println("这些字符对应的电话号码为:");
        for(int i=0;i<num;i++){
            for(int j=0;j<11;j++){
                System.out.print(map.get(eng[i][j]));
            }
            System.out.println("\n");
        }
    }
}

运行结果及报错内容

Exception in thread "main" java.lang.NullPointerException: Cannot store to object array because "eng[i]" is null
at Work.telephone.main(telephone.java:17)
请问这是为什么,该怎么改?

我的解答思路和尝试过的方法
我想要达到的结果

eng定义改成这样String[][] eng=new String[num][11];

我不太懂java,但看你这结果是不是你数组里面没赋值或者越界?你查一下,我胡说的,希望能帮到你

题目是什么