我有兩個類,第一個類(PatientFlow)包含一個建構式、一堆getMethods和一個toString,沒有main。第一個類不能輸出或獲得讀取的輸入,只能通過傳遞引數。 第二個類(Patient)要求用戶輸入一些問題,如姓名、出生日期等,這個類也運行一堆方法。
Patient p1 = new Patient(name, dob, address, gender, medicareNum, appDay, time)。/Patient created//是用所有用戶的輸入創建的,并發送給構造器類。
現在我的任務是在第一個類(patientFlow)中創建一個病人(物件)的陣列,但我不明白如何做到這一點...... 我已經在這個問題上嚴重受阻好幾天了,它讓我發瘋了。當我把main()放在第一個類中時,我無法參考任何東西,因為靜態的。
public class Patient
{
private String name, age, address, gender, time, appDay;
private int medicareFinal;
private boolean 疫苗接種。
public Patient (String name, String age, String address, String gender, int medicareFinal, String appDay, String time)
{
this.name = name;
this.age = age;
this.address = address;
this.gender = gender;
this.medicareFinal = medicareFinal;
this.appDay = appDay;
this.time = time;
}
public String getName().
{
return name。
}
public String getAddress()
{
return地址。
}
public String getGender()
{
return性別。
}
public String getTime()
{
return 時間。
}
public String getAge()
{
return age。
}
public int getMedicare()
{
return medicareFinal;
}
public String getAppDay()
{
return appDay;
}
public String toString() ?
{
字串data。
data = "病人姓名。" name "
"。
data = "Age/Dob: " age "
"。
data = "地址。" 地址 "
"。
data = "Gender: " 性別 " "; data = "性別:" 性別 "
"。
data = "Medicare Number: "/span> medicareFinal "
"。
data = "預約日。" appDay "
"。
data = "預約時間:" time "
"。
return data。
}
import java.time.*; // This is used to utilize dates/times。
import java.util.*;
public class PatientFlow
{
病人p1,p2。
Scanner scan=new Scanner(System.in)。
enum weekdays {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}。//任務4的列舉型別。
public void readPatient1() /Details of first patient
{
System.out.println("Firstly, what is your full name?")。
String name = scan.nextLine() 。
System.out.println(name ", Please enter your date of birth in the correct format yyyy-mm-dd:") 。
String dob = scan.nextLine() 。
age(dob); //Calling age method to check if patient is older than 18。
System.out.println("你目前的居住地址是什么?")。
String address= scan.nextLine();
System.out.println("你是男性還是女性?")。
String gender = scan.nextLine();
System.out.println("你的8位數醫療保險號碼是什么?")。
int medicareNum = scan.nextInt()。
int medicareFinal = medicare(medicareNum); //Calling medicare method to check if input = 8 numbers[/span
String shift = scan.nextLine() 。
System.out.println("你想在哪一天預訂疫苗接種?")。
String appDay = scan.nextLine() 。
weekdays(appDay); //Calling weekday method which checks availability through enumerated type[/span
System.out.println("您想在" appDay "什么時間預訂?")。
String time = scan.nextLine() 。
p1 = new Patient(name, dob, address, gender, medicareNum, appDay, time); /Patient created
System.out.println("You have booked in: ");
System.out.println("-----------------------------------------------" "
"/span> p1)。
System.out.println("-----------------------------------------------");
}
public void readPatient2() /Details for the second patient
{
System.out.println("參加第二次預約的人的姓名:")。
String name = scan.nextLine() 。
System.out.println(name ", Please enter your date of birth in the correct format yyyy-mm-dd:") 。
String dob = scan.nextLine() 。
age(dob); //Calling age method to check if patient is older than 18。
System.out.println("你目前的居住地址是什么?")。
String address= scan.nextLine();
System.out.println("你是男性還是女性?")。
String gender = scan.nextLine();
System.out.println("你的8位數醫保號碼是什么?")。
int medicareNum = scan.nextInt()。
int medicareFinal = medicare(medicareNum); //Calling medicare method to check if input = 8 numbers[/span
String shift = scan.nextLine(); //使用這個來捕捉用戶的'enter'輸入。
System.out.println("你想在哪一天預訂疫苗接種?")。
String appDay = scan.nextLine() 。
weekdays(appDay); //Calling weekday method which checks availability through enumerated type[/span
System.out.println("你想在" appDay "什么時間預訂?")。
String time = scan.nextLine() 。
p2 = new Patient(name, dob, address, gender, medicareNum, appDay, time); /Patient created
System.out.println("感謝您使用此在線預訂服務。")。
System.out.println("您已經預訂了:")。
System.out.println("-----------------------------------------------" "
"/span> p2)。
System.out.println("-----------------------------------------------");
}
public void age(String dob) /Method for DOB
{
Scanner scan = new Scanner(System. in); /Retrieving User inputs[/span].
字串答案,同意。
LocalDate dateOfBirth = LocalDate.parse(dob); //將字串輸入轉換為日期格式。
LocalDate currDate = LocalDate.now(); //獲得今天的日期: yyyy-mm-dd >。
Period period = Period.between(currDate, dateOfBirth); //獲取兩個日期之間的差異。
int age = Math.abs(period.getYears()); //隔離年數以得到適當的年齡格式。
if (age < 18)
{
System.out.println("對不起,因為你是" age "歲,為你預約服務是非法的。你必須年滿18歲才能預約這項服務。")。)
System.out.println("如果一個成年人和你在一起,請輸入'是'繼續。如果沒有,請稍后再嘗試預訂。謝謝你")。)
answer = scan.nextLine();
if (answer.equals("yes"/span>))
{
System.out.println("繼續預訂程序...")。
} else; }
{
System.out.println("你需要一個成年人和你一起才能繼續這個預訂。")。
System.exit(0); //Terminate if person is under 18 without adult.
}
} //回傳值。
}
public static int medicare(int medicareNum) /Method for medicare
{
Scanner scan = new Scanner(System.in)。
字串正確,移位。
int medicareFinal = medicareNum。
int medicaretemp;
int length = String.valueOf(medicareNum).length(); // Int轉換為字串長度
if (length == 8) // If陳述句進行正確的細節處理。
{
System.out.println(medicareNum ", 你確定這是正確的數字?這個資訊是非常重要的。'是'或'否'")。)
correct = scan.nextLine();
if (correct.equals("yes"/span>)) //嵌套if陳述句
{
System.out.println("Thank you, please continue with the booking") 。
medicareFinal = medicareNum。
} else; medicareFinal = medicareNum; }
{
length = 0;
}
}
while (length != 8) // while loop to get correct size of input
{ System.out.println("你沒有輸入正確的數字數量。請再試一次。")。)
medicaretemp = scan.nextInt();
medicareFinal = medicaretemp;
shift = scan.nextLine(); //使用這個來捕捉用戶的'enter'輸入。
int lengthNew = String.valueOf(medicaretemp).length(); // 將int轉換為String。
if (lengthNew == 8)
{
System.out.println(medicaretemp ", 這個新數字是否正確?這個資訊是非常重要的。'是'或'否'")。)
correct = scan.nextLine();
if (correct.equals("yes"/span>))
{
medicareFinal = medicaretemp;
System.out.println("Thank you, please continue with the booking") 。
break; //Breaking loop if requirement is met。
} else; /Breaking loop if requirement is met }
{
length = 0;
}
}
}
return medicareFinal; //return value。
}
public void weekdays(String appDay)
{
boolean dayAvail = false。
for(weekdays day : weekdays.values() )
{
if (appDay.equalsIgnoreCase(day.name() ))
{
dayAvail = true;
System.out.println(appDay " 可以接受您的預約。")。
break。
}
}
if (!dayAvail)
{
System.err.println( "This day is not available." ); //顯示錯誤資訊,將為作業3放入例外。
}
}
public void confirmation()
{
int answer;
字串移位。
System.out.println("兩個病人的細節是否正確或需要修改?")。
System.out.println("按'1'修改" p1.getName() ",按'2'修改" p2.getName() " ,或按3完成預訂")。
answer = scan.nextInt();
shift = scan.nextLine(); //使用這個來捕捉用戶的'enter'輸入。
if (answer==1)
{
readPatient1(); //Calls back to Patient 1 method[/span
確認()。
}
if (answer==2)
{
readPatient2(); //Calls back to Patient 2 method; /Calls back to Patient 2 method.
確認()。
}
if (answer==3)
{
System.out.println("感謝您使用這項在線預訂服務。")。
System.out.println("您已經預訂了:")。
System.out.println("-----------------------------------------------" "
"/span> p1)。
System.out.println("-----------------------------------------------" "
"/span> p2)。
System.out.println("-----------------------------------------------");
System.out.println("記得提前10分鐘來,用相應的應用程式簽到!") 兩個預約都將在AIS舉行")。)
System.exit(0); //當用戶對細節滿意時退出程式。
}
}
public void PatientBook()
{
字串答案。
System.out.println("
")。)
System.out.println("你想增加一個約會嗎?'是'或'否'")。)
answer = scan.nextLine();
switch (answer) //使用開關來決定接下來需要哪些方法。
{
case ("yes") 。
readPatient2();
確認()。
case ("no"):
System.out.println("謝謝你使用這個在線預訂服務。")。
System.out.println("您已經預訂了:")。
System.out.println("-----------------------------------------------" "
"/span> p1)。
System.out.println("-----------------------------------------------");
System.out.println("記得提前10分鐘來,用相應的應用程式簽到! 您的預約將在AIS舉行")。)
System.exit(0)。
}
}
public void init() //method to call all methods when required
{
start()。
readPatient1();
PatientBook()。
readPatient2();
確認()。
}
public static void main(String [ ] args)
{
PatientFlow pf = new PatientFlow()。//Creating the object
pf.init()。
}
希望得到任何幫助,或者在一些視頻中的標簽
。TIA
uj5u.com熱心網友回復:
// imports
public class PatientFlow {
private Patient[] patients;
public PatientFlow(){
//init array。
}
//其他道具。
//getter & setter
}
uj5u.com熱心網友回復:
順便說一下,在當前的Java 17中,你可以使用records功能將整個Patient類減少到一個簡單的行。
record Patient ( String name, String age, String address, String gender, int medicareFinal, String appDay, String time ) {}。
你不需要你的enum weekdays。Java提供了DayOfWeek列舉。
我不明白多個readPatient1()方法的含義。
你說:
現在我的任務是在第一個類(patientFlow)中創建一個病人(物件)陣列。
所以在該類中宣告一個成員欄位。陣列的大小為你要預訂的最多的病人數量。
Patient[] patients = new Patient[ 12 ] 。
第一個病人進入由基于零的索引號確定的第一個插槽。
patients[ 0 ] = new Patient( ... ) 。
在你的回圈中增加一個索引號來重復添加病人。命名你的索引號,例如 int index = 0 ;
patients[ index ] = new Patient( ... ) 。
FYI,在實際作業中,我們可能會使用一個List而不是一個單純的陣列。
至于static,你可能在你的main方法中遇到了問題,我在這里沒有看到。而且這個問題幾乎可以肯定是與 Stack Overflow 上已經回答過的許多現有問題重復的。在發帖前一定要進行搜索。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/312745.html
標籤:
