Java &引用;p";无法解析为变量
我必须使用switch语句来允许用户选择他们想要做的事情,如果他们选择“1”,它将允许他们向数据库添加一个人。在“1”的switch语句中,我得到一个语法错误,指出“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
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
。