我只是想简化这段 java 代码,因为我觉得它有点冗余,我也想摆脱可变字符串运算符 +i+,但我不确定此时我想做什么
package skillsDemo2;
import java.util.Scanner;
public class HICHealthcare {
public static void main(String[] args) {
Person policyholder = new Person ();
Scanner sc = new Scanner(System.in);
double impatient_cost=0,private_cost=0,amount=0;
if(i==1)
{
suffix ="st";
}
if (i == 2)
{
suffix = "nd";
}
if (i == 3)
{
suffix= "rd";
}
if (i == 4)
{
suffix = "th";
}
if ( i == 5)
{
suffix = "th";
}
if ( i == 6)
{
suffix = "th";
}
System.out.println("Enter " +i+suffix+ " dependent name: ");
name = sc.next();
System.out.println("Enter the age of the " +i+suffix+ " dependent: ");
age = sc.nextInt();
if (i == 1 )
{
dependent1 = new Person (name, age, 250);
amount=amount+250;
}
if (i == 2 )
{
dependent2 = new Person (name, age, 150);
amount=amount+150;
}
if (i == 3 )
{
dependent3 = new Person (name, age, 100);
amount=amount+100;
}
if (i == 4 )
{
dependent4 = new Person (name, age, 50);
amount=amount+50;
}
if (i == 5)
{
dependent5 = new Person (name, age, 0);
}
if (i == 6)
{
dependent6 = new Person (name, age, 0);
}
}
String roomType="NA";
System.out.println("Do you want inpatient insurance(yes/no)");
String inpatient_insurance= sc.next();
if(inpatient_insurance.equals("yes"))
{
impatient_cost=200;
roomType="Semi Private";
}
System.out.println("Do you want private room(yes/no )");
String private_room= sc.next();
if(private_room.equals("yes"))
{
private_cost=100;
roomType="Private";
}
System.out.println("Extras : \n - Orthopaedic care\n - Ophthalmic care \n "
+ " - Maternity care\n - Fertility care\n -Psychiatric care");
System.out.println("How many extras do you want ? ");
int extras=sc.nextInt();
float extracharge =0;
if(extras<=2)
extracharge =extras*50;
else
System.out.println("More than 2 extras not allowed.");
String ExtraNames="";
for(int i =1;i<=extras;i++)
{
System.out.println("Enter Choice : \n 1. Orthopaedic care\n 2. Ophthalmic care \n "
+ " 3. Maternity care\n 4. Fertility care\n 5.Psychiatric care");
int care=sc.nextInt();
if(care==1)
{
ExtraNames=ExtraNames+"\n \t \t \t Orthopaedic care";
}
if(care==2)
{
ExtraNames=ExtraNames+"\n \t \t \t Ophthalmic care";
}
if(care==3)
{
ExtraNames=ExtraNames+"\n \t \t \t Maternity care";
}
if(care==4)
{
ExtraNames=ExtraNames+"\n \t \t \t Fertility care";
}
if(care==5)
{
ExtraNames=ExtraNames+"\n \t \t \t Psychiatric care";
}
}
amount=amount+impatient_cost+private_cost+extracharge;
System.out.println("\t \t \t Health Care Policy");
System.out.println("Name : \t \t"+policyholder.Name);
System.out.println("Number of Dependants : \t \t"+dependent);
for (int i =1;i<=dependent;i++)
{
if(i==1)
dependent1.display();
if(i==2)
dependent2.display();
if(i==3)
dependent3.display();
if(i==4)
dependent4.display();
if(i==5)
dependent5.display();
if(i==6)
dependent6.display();
}
System.out.println("Basic Cost :\t\t "+policyholder.Cost);
System.out.println("Impatient Cost : \t\t"+inpatient_insurance+"\t\t"+impatient_cost);
System.out.println("Room Type : \t\t"+roomType+"\t\t"+private_cost);
System.out.println("Additional Extras : \t\t"+ extracharge +ExtraNames);
System.out.println("Total Before Vat : \t\t"+amount);
double vat= (21.0/100.0)*amount;
System.out.println(" VAT :\t \t\t" + String.format("%.2f", vat));
System.out.println("Total : \t\t\t"+(amount+vat ));
}
我试图删除运算符变量并直接在使用它的表达式/语句中使用 i 我还想将使用 i 的多个语句/表达式组合成一个语句/表达式,以及使用循环而不是多次重复类似的代码,以及将逻辑提取到单独的、命名良好的方法中以避免重复。
有很多方法可以缩短您所写的内容。一种不错的方法是使用“开关表达式”,它看起来像这样。
suffix = switch (i) {
case 1 -> "st";
case 2 -> "nd";
case 3 -> "rd";
default -> "th";
};
另一种选择是将选项存储在数组中,并使用
i
作为索引来查找它们。它可能看起来像这样。这使用条件运算符来确保索引在数组的范围内。
String[] suffixes = { "th", "st", "nd", "rd" };
suffix = suffixes[ i > 3 ? 0 : i ];