Java实验展示系统,在arraylist中删除元素报错NullPointerException

Java实验展示系统
要求以命令行的形式或图形的方式或界面的方式展示所有Java实验做的题目和运行结果。
改展示系统主要有下面的功能:
1、增加java实验的题目
2、修改题目
3、删除题目
4、为每个实验添加完成的程序
5、为每个实验添加完成的程序的运行结果
6、删除已提交的程序,删除已提交的结果
展示系统退出后提交的程序和结果保存在文件或数据库中。

在arraylist动态数组中删除特定元素,但是总是出现下面这个问题,不知道为什么,可以帮忙看看嘛,谢谢啦

img

System.java

package ShowSystem;

import java.io.*;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;

public class System {
    public static int a;
    public static void main(String[] args) throws IOException {
        ArrayList<Problem> arrayList = new ArrayList<>();
        java.lang.System.out.println("------------------欢迎进入Java实验展示系统------------------");
        while (true) {
            java.lang.System.out.println("********************************************************");
            java.lang.System.out.println("|                     1.添加题目                         |");
            java.lang.System.out.println("|                     2.删除题目                         |");
            java.lang.System.out.println("|                     3.修改题目                         |");
            java.lang.System.out.println("|                     4.提交结果                         |");
            java.lang.System.out.println("|                     5.展示程序                         |");
            java.lang.System.out.println("|                     6.退出                            |");
            java.lang.System.out.println("**********************请输入您的选择***********************");
            Scanner sc = new Scanner(java.lang.System.in);
            File file = new File("Problems.txt");
            try {
                a = sc.nextInt();
                switch (a) {
                    case 1: {
                        AddProblem(arrayList);
                        break;
                    }
                    case 2: {
                        DelProblem(arrayList);
                        break;
                    }
                    case 3: {
                        UpdateProblem(arrayList);
                        break;
                    }
                    case 4: {
                        SubmitProgram(file,arrayList);
                        break;
                    }
                    case 5: {
                        ShowProgram(file);
                        break;
                    }
                    case 6: {
                        java.lang.System.out.println("感谢您的使用!");
                        java.lang.System.exit(0);
                    }
                    default: {
                        java.lang.System.out.println("请输入1-6的数字!");
                        break;
                    }
                }
            } catch (InputMismatchException e) {
                java.lang.System.out.println("请输入正确的数字!");
            }
        }
    }

    //增加题目
    public static void AddProblem(ArrayList<Problem> arrayList){
        Scanner sc=new Scanner(java.lang.System.in);
        String num;
        while (true){
            java.lang.System.out.println("请输入您要添加的题目序号:");
            num=sc.nextLine();
            boolean flag=check(arrayList,num);
            if(flag){
                java.lang.System.out.println("该题号已存在,请重新输入!");
            }else{
                break;
            }
        }
        java.lang.System.out.println("请输入题目:");
        String problem=sc.nextLine();
        java.lang.System.out.println("请输入运行程序:");
        String program=sc.nextLine();
        java.lang.System.out.println("请输入运行结果:");
        String result=sc.nextLine();

        Problem pro=new Problem();
        pro.setProblem(problem);
        pro.setProgram(program);
        pro.setResult(result);
        arrayList.add(pro);
        java.lang.System.out.println("添加题目成功!");
    }

    //序号查重
    public static boolean check(ArrayList<Problem> arrayList, String num){
        boolean flag=false;
        for (Problem pro : arrayList) {
            if (pro.getProblem().equals(num)) {
                flag = true;
                break;
            }
        }
        return flag;
    }

    //删除题目
    public static void DelProblem(ArrayList<Problem> arrayList){
        Scanner sc=new Scanner(java.lang.System.in);
        java.lang.System.out.println("请输入要删除的题目序号:");
        String num=sc.nextLine();
        int index=-1;
        for(int i=0;i<arrayList.size();i++){
            Problem pro=arrayList.get(i);
            if(pro.getNum().equals(num)){
                index=i;
                break;
            }
        }
        if(index==-1){
            java.lang.System.out.println("该题号不存在,请先添加题目!");
        }
        else {
            arrayList.remove(index);
            java.lang.System.out.println("删除题目成功!");
        }
    }

    //更改题目
    public static void UpdateProblem(ArrayList<Problem> arrayList){
        Scanner sc=new Scanner(java.lang.System.in);
        java.lang.System.out.println("请输入需要修改的题目题号:");
        String num=sc.nextLine();
        int temp=-1;
        for(int i=0;i<arrayList.size();i++){
            Problem pro=arrayList.get(i);
            if(pro.getNum().equals(num)){
                temp=i;
                break;
            }
        }
        if(temp==-1){
            java.lang.System.out.println("该题号不存在,请重新添加学生信息");
            AddProblem(arrayList);
        }else {
            java.lang.System.out.println("请输入新的题目:");
            String problem = sc.nextLine();
            java.lang.System.out.println("请输入新的程序:");
            String program = sc.nextLine();
            java.lang.System.out.println("请输入新的运行结果:");
            String result=sc.nextLine();

            Problem pro=new Problem();
            pro.setNum(num);
            pro.setProblem(problem);
            pro.setProgram(program);
            pro.setResult(result);
            arrayList.set(temp,pro);
            java.lang.System.out.println("修改题目成功!");
        }
    }

    //提交程序
    public static void SubmitProgram(File file, ArrayList<Problem> arrayList) throws IOException {
        FileWriter fw=new FileWriter(file,true);
        BufferedWriter bw=new BufferedWriter(fw);
        for (Problem value : arrayList) {
            bw.newLine();
            String problem = value.getProblem();
            bw.write("题目:"+problem);//写入题目
            bw.newLine();
            String program = value.getProgram();
            bw.write("程序:" + program);//写入程序
            bw.newLine();
            String result = value.getResult();
            bw.write("运行结果:" + result);//写入运行结果
            bw.newLine();
        }
        bw.flush();
        fw.close();
        java.lang.System.out.println("提交程序成功!");
    }

    //展示程序
    public static void ShowProgram(File file) throws IOException {
        try {
            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
            String pro;
            while ((pro = br.readLine()) != null) {
                java.lang.System.out.println(pro);
                java.lang.System.out.println();
            }
            br.close();
            fr.close();
        }catch (FileNotFoundException e){
            java.lang.System.out.println("找不到题目!");
        }
    }
}

Problem.java

package ShowSystem;

public class Problem {
    private String num;//题目序号
    private String problem;//题目
    private String program;//程序
    private String result;//运行结果
    public Problem(){
    }
    public Problem(String num,String problem,String program,String result){
        this.num=num;
        this.problem=problem;
        this.program=program;
        this.result=result;
    }
    public String getNum(){
        return num;
    }
    public void setNum(String num){
        this.num=num;
    }
    public String getProblem(){
        return problem;
    }
    public void setProblem(String problem){
        this.problem=problem;
    }
    public String getProgram(){
        return program;
    }
    public void setProgram(String program){
        this.program=program;
    }
    public String getResult(){
        return result;
    }
    public void setResult(String result){
        this.result=result;
    }
}

简单分析这个报错,空指针异常,看代码 要么是pro 是null ,要么是 pro.getNum() 是null
这种时候,建议 这样判断 null != pro && null != pro.getNum() && pro.getNum().equals(num)

img

你的 num压根就没有塞值

img

img