Java错误:NullPointerException

我有一个孩子,其老师是MIA,并且他的作业即将到期。尝试运行该程序时,我得到了以下分配和一个无用的错误。我正在尝试自己学习问题,因此我可以将其作为学习的经验,而不是简单地放弃解决方案。以下是作业:

该程序应提示用户进入一个州并打印州鸟和花。用户应该能够进入状态而不必担心情况。 (例如,用户可以输入马里兰州,马里兰州,马里兰州或任何其他可能的大小写字符组合。状态还可以包含开头和结尾的空格。提示:将州信息存储在多维数组中。程序应继续提示输入用户进入状态直到输入“无”,您将需要做一些研究以找到状态花鸟。

这是到目前为止编写的Java文件: TestSBF.java

import java.util.*;

public class TestSBF {
    public static void main(String[] args) {

        String stateName = "";
        //ArrayList SBF = new ArrayList();
       ArrayList info = new ArrayList();

        System.out.println("Enter your favorite state or 'None' "
                        + "to exit program:");

        stateName = "Alabama".trim().toUpperCase();

            while (!stateName.equalsIgnoreCase ("NONE")) {
                SBF Alabama = new SBF();

                      if (Alabama.getFound()) {

                          System.out.println(stateName);
                          String bird = Alabama.getBird();
                          System.out.println("Bird: " + bird);
                          String flower = Alabama.getFlower();
                          System.out.println("Flower: " + flower);

                      } else {
                          System.out.println("State not found");
                    }
                    info.add(Alabama);
                    System.out.println("Please enter next state");
            }
            for (int i=0; i<info.size();i++){
              System.out.println(info.toString());
            }
          }
}

SBF.java

import java.util.*;

public class SBF {
static final int STATES = 50;
static final int INFO = 3;

    private  String stateName;
    private  String stateBird;
    private  String stateFlower;                                            
    private  boolean isStateFound;
    private static String stateInfo[][] = 
    {
     {"ALABAMA","Yellowhammer","Camellia"},
     {"ALASKA","Willow Ptarmigan","Forget-me-not"},
     {"ARIZONA","Cactus Wren","Saguaro Cactus Blossom"},
     {"ARKANSAS","Mockingbird","Apple Blossom"},
     {"CALIFORNIA","California Valley Quail", "Golden Poppy"},
     {"COLORADO","Lark Bunting", "Rocky Mountain Columbine"}, 
     {"CONNECTICUT","American Robin", "Mountain Laurel"},
     {"DELAWARE","Blue Hen Chicken","Peach Blossom"},
     {"FLORIDA","Mockingbird","Orange Blossom"},
     {"GEORGIA","Brown Thrasher","Cherokee Rose"},
     {"HAWAII","Nene(Hawaiian Goose)","Yellow Hibiscus/Pua Aloalo"},
     {"IDAHO","Mountain Bluebird","Syringa"},
     {"ILLINOIS","Cardinal","Native Violet"},
     {"INDIANA","Cardinal","Peony"},
     {"IOWA","Goldfinch","Wild Rose"},
     {"KANSAS","Western Meadowlark","Native Sunflower"},
     {"KENTUCKY","Northern Cardinal","Goldenrod"},
     {"LOUISIANA","Eastern Brown Pelican","Magnolia"},
     {"MAINE","Chickadee","White Pine Cone and Tassel"},
     {"MARYLAND","Baltimore Oriole","Black-eyed Susan",},
     {"MASSACHUSETTS","Chickadee","Mayflower"},
     {"MICHIGAN","American Robin","Apple Blossom"},
     {"MINNESOTA","Common Loon","Pink and White Lady's Slipper"},
     {"MISSISSIPPI","Mockingbird","Magnolia"},
     {"MISSOURI","Bluebird","Hawthorn"},
     {"MONTANA","Western Meadowlark","Bitterroot"},
     {"NEBRASKA","Western Meadowlark","Goldenrod"},
     {"NEVADA","Mountain Bluebird","Sagebrush"},
     {"NEW HAMPSHIRE","Purple Finch","Purple Lilac"},
     {"NEW JERSEY","Eastern Goldfinch","Violet"},
     {"NEW MEXICO","Greater Roadruner","Yucca"},
     {"NEW YORK","Eastern Bluebird","Rose"},
     {"NORTH CAROLINA","Cardinal","Dogwood"},
     {"NORTH DAKOTA","Western Meadowlark","Wild Prairie Rose"},
     {"OHIO","Cardinal","Scarlet Carnation"},
     {"OKLAHOMA","Scissor-tailed Flycatcher","Misletoe"},
     {"OREGON","Western Meadowlark","Oregon Grape"},
     {"PENNSYLVANIA","Ruffed Grouse","Mountain Laurel"},
     {"RHODE ISLAND","Rhode Island Red","Violet"},
     {"SOUTH CAROLINA","Carolina Wren","Yellow Jessamine"},
     {"SOUTH DAKOTA","Ring-necked Pheasant","Pasque Flower"},
     {"TENNESSEE","Nothern Mockingbird","Iris"},
     {"TEXAS","Mockingbird","Bluebonnet"},
     {"UTAH","California Gull","Sego Lily"},
     {"VERMONT","Hermit Thrush","Red Clover"},
     {"VIRGINIA","Cardinal","Dogwood"},
     {"WASHINGTON","Willow Goldfinch","Rhodedendron"},
     {"WEST VIRGINIA","Cardinal","Rhodedendron"},
     {"WISCONSIN","American Robin","Wood Violet"},
     {"WYOMING","Western Meadolark","Indian Paintbrush"}};         

    public SBF (String[][] si, String sn, String sb, String sf, boolean f) {                        
                        stateName = sn;
                        stateBird = sb;
                        stateFlower = sf;
                        isStateFound = f;
                        stateInfo = si;
        }
    public SBF(){                        

                  for (int i=0; i<STATES;i++) {
                    for (int j=0; j<INFO;j++) {
                      if (!stateName.equalsIgnoreCase(stateInfo[i][0])) {
                          isStateFound = false;
                  } else {

                       isStateFound = true;
                       stateBird = stateInfo[j][0];
                       stateFlower = stateInfo[j][1];
                       break;
                      }
                    }                   
                  }                                
        }

    public boolean getFound() {
        return isStateFound;                                                                                         
    }
    public String getBird() {
        return stateBird;
    }
    public String getFlower() {
        return stateFlower; 
    }
    public String toString() {
        String str = "\n***Thank you for using the SBF app***\n"
                + "A summary report for each State you selected is as follows: "
                + stateName + ": " + stateBird + "\tFlower: " + stateFlower + 
                "\nStay safe and use this app again!";

        return str;
    }
}

产生的错误是:

Enter your favorite state or 'None' to exit program:
Exception in thread "main" java.lang.NullPointerException
    at SBF.<init>(SBF.java:85)
    at TestSBF.main(TestSBF.java:29)

I see that the lines SBF Alabama = new SBF(); (TestSBF.java) and if (!stateName.equalsIgnoreCase(stateInfo[i][0])) { (SBF.java) are getting called as the errors but for the life of me, I cannot figure why what value is null. Any assistance would be greatly appreciated, thanks in advance.