Java &引用;p";无法解析为变量

Java &引用;p";无法解析为变量,java,class,variables,Java,Class,Variables,我必须使用switch语句来允许用户选择他们想要做的事情,如果他们选择“1”,它将允许他们向数据库添加一个人。在“1”的switch语句中,我得到一个语法错误,指出“p”不能解析为变量。然而,我已经尝试了我能想到的一切来让这个工作,它不会。有什么想法吗 package hartman; import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(Strin

我必须使用switch语句来允许用户选择他们想要做的事情,如果他们选择“1”,它将允许他们向数据库添加一个人。在“1”的switch语句中,我得到一个语法错误,指出“p”不能解析为变量。然而,我已经尝试了我能想到的一切来让这个工作,它不会。有什么想法吗

package hartman;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    Printer.printWelcome();

    Scanner keyboard = new Scanner(System.in);
    ArrayList<Person> personList = new ArrayList<>();
    boolean keepRunning = true;
    while (keepRunning) {
        Printer.printMenu();
        Printer.printPrompt("Please enter your operation: ");

        String userSelection = keyboard.nextLine();

        switch (userSelection) {
        case "1":
            Database.addPerson(p);
            break;
        case "2":
            Database.printDatabase(personList);
            break;
        case "3":
            Printer.printSearchPersonTitle();
            String searchFor = keyboard.nextLine();
            Database.findPerson(searchFor);
            break;
        case "4":
            keepRunning = false;
            break;
        default:
            break;
        }
    }

    Printer.printGoodBye();
    keyboard.close();
}

 }
package-hartman;
导入java.util.ArrayList;
导入java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
Printer.printWelcome();
扫描仪键盘=新扫描仪(System.in);
ArrayList personList=新的ArrayList();
布尔保持修剪=真;
同时(继续修剪){
Printer.printMenu();
Printer.printPrompt(“请输入您的操作:”);
字符串userSelection=keyboard.nextLine();
开关(用户选择){
案例“1”:
数据库addPerson(p);
打破
案例“2”:
数据库。打印数据库(personList);
打破
案例“3”:
Printer.printSearchPersonTitle();
String searchFor=keyboard.nextLine();
数据库。findPerson(搜索);
打破
案例“4”:
保持修剪=错误;
打破
违约:
打破
}
}
Printer.print再见();
键盘关闭();
}
}
这是Database.java-

package hartman;

import java.util.ArrayList;
import java.util.Scanner;

public class Database {
static Scanner keyboard = new Scanner(System.in);
private static ArrayList<Person> personList;

public Database() {

}

public static void addPerson(Person personList2) {
    Printer.printAddPersonTitle();
    Printer.printPrompt("  Enter first name: ");
    String addFirstName = keyboard.nextLine();

    Printer.printPrompt("  Enter last Name: ");
    String addLastName = keyboard.nextLine();

    Printer.printPrompt("  Enter social Security Number: ");
    String addSocial = keyboard.nextLine();

    Printer.printPrompt("  Enter year of birth: ");
    int addYearBorn = Integer.parseInt(keyboard.nextLine());

    System.out.printf("\n%s, %s saved!\n", addFirstName, addLastName);

    Person person = new Person();
    person.setFirstName(addFirstName);
    person.setLastName(addLastName);
    person.setSocialSecurityNumber(addSocial);
    person.setYearBorn(addYearBorn);
    personList.add(personList2);
}

    public static void printDatabase(ArrayList<Person> personList) {
    System.out
            .printf("\nLast Name           First Name           Social Security Number  Age\n");
    System.out
            .printf("=================== ===================  ======================  ===\n");
    for (Person p : personList) {

        System.out.printf("%-20s%-21s%-24s%s\n", p.getLastName(),
                p.getLastName(), p.getSocialSecurityNumber(),          p.getAge());

    }

}

public static ArrayList<Person> findPerson(String searchFor) {
    ArrayList<Person> matches = new ArrayList<>();
    for (Person p : personList) {
        boolean isAMatch = false;

        if (p.getFirstName().equalsIgnoreCase(searchFor)) {
            isAMatch = true;

        }
        if (p.getLastName().equalsIgnoreCase(searchFor)) {
            isAMatch = true;

        }
        if (p.getSocialSecurityNumber().contains(searchFor)) {
            isAMatch = true;
            ;
        }
        if (String.format("%d", p.getAge()).equals(searchFor))
            if (isAMatch) {

            }
        matches.add(p);
    }
    return matches;

}

}
package-hartman;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类数据库{
静态扫描仪键盘=新扫描仪(System.in);
私有静态数组列表personList;
公共数据库(){
}
公共静态void addPerson(Person personList2){
Printer.printAddPersonTitle();
Printer.printPrompt(“输入名字:”);
字符串addFirstName=keyboard.nextLine();
Printer.printPrompt(“输入姓氏:”);
字符串addLastName=keyboard.nextLine();
Printer.printPrompt(“输入社会保险号:”);
字符串addSocial=keyboard.nextLine();
Printer.printPrompt(“输入出生年份:”);
int addYearBorn=Integer.parseInt(keyboard.nextLine());
System.out.printf(“\n%s,%s已保存!\n”,addFirstName,addLastName);
Person=新人();
person.setFirstName(addFirstName);
person.setLastName(addLastName);
person.setSocialSecurityNumber(addSocial);
person.setYearBorn(addYearBorn);
personList.add(personList 2);
}
公共静态void打印数据库(ArrayList personList){
系统输出
.printf(“\n姓氏社会保险号码年龄\n”);
系统输出
.printf(“====================================================================================================\n”);
for(个人p:个人列表){
System.out.printf(“%-20s%-21s%-24s%s\n”,p.getLastName(),
p、 getLastName(),p.getSocialSecurityNumber(),p.getAge();
}
}
公共静态ArrayList findPerson(字符串搜索){
ArrayList matches=新的ArrayList();
for(个人p:个人列表){
布尔匹配=假;
if(p.getFirstName().equalsIgnoreCase(搜索)){
isAMatch=true;
}
if(p.getLastName().equalsIgnoreCase(搜索)){
isAMatch=true;
}
if(p.getSocialSecurityNumber().contains(searchFor)){
isAMatch=true;
;
}
if(String.format(“%d”,p.getAge()).equals(searchFor))
如果(匹配){
}
添加(p);
}
返回比赛;
}
}

编译器无法将p解析为变量,因为您没有声明p

更好的解决方案: 我认为直接在数据库中执行人员创建过程要好得多,因此请执行以下操作: 将Database.java更改为:

public static void addPerson() {
Printer.printAddPersonTitle();
Printer.printPrompt("  Enter first name: ");
String addFirstName = keyboard.nextLine();

Printer.printPrompt("  Enter last Name: ");
String addLastName = keyboard.nextLine();

Printer.printPrompt("  Enter social Security Number: ");
String addSocial = keyboard.nextLine();

Printer.printPrompt("  Enter year of birth: ");
int addYearBorn = Integer.parseInt(keyboard.nextLine());

System.out.printf("\n%s, %s saved!\n", addFirstName, addLastName);

Person person = new Person();
person.setFirstName(addFirstName);
person.setLastName(addLastName);
person.setSocialSecurityNumber(addSocial);
person.setYearBorn(addYearBorn);
personList.add(person);
}
将第一个代码更改为:

Database.addPerson();

Database.addPerson(p)-什么是
p
?您没有声明变量
p
,这将导致此行失败<代码>数据库.addPerson(p)
确切地说,没有定义
p
“你能想到的一切”包括实际上有一个名为
p
的变量吗?我如何解决这个问题?我不知道该把它放在哪里,因为如果我想去任何地方,它都会被吓坏。更正了代码,很抱歉,它是在深夜-。-!hartman.main.main(main.java:24)@user3562527哪一行是36?现在获取此信息:hartman.Database.addPerson(Database.java:35)hartman.main.main(main.java:24)的线程“main”java.lang.NullPointerException中的异常添加
personList=newarraylist()
数据库的构造函数
。从所有
数据库
的方法中删除
静态
。在
main
方法中初始化新的
数据库
,并将其分配给局部变量。在
main
中的所有调用中,使用该局部变量来代替单词
Database