让构造函数工作初始变量


import java.util.Scanner;
public class StageA {
private static final Scanner sc = new Scanner(System.in);

public static void main(String[] args) {
StageA stageA = new StageA();
stageA.runMenu();
}
private void runMenu() {
char selection;
do {
displayMenu();
selection = sc.nextLine().toLowerCase().charAt(0);
processSelection(selection);
} while (selection != 'x');
}
private static void displayMenu() {
System.out.printf("n  **** Ozzey Attraction Menu ****n");
System.out.printf("A : Add New Attractionn");
System.out.printf("B : View Attractionn");
System.out.printf("C : List All Attractionsn");
System.out.printf("D : Sell Ticketn");
System.out.printf("E : Refund Ticketn");
System.out.printf("F : Remove Attractionn");
System.out.printf("X : Exitnn");
System.out.printf("Enter selection : ");
}
private static void createAttraction() {

System.out.printf("Enter attraction description : ");
String description = sc.nextLine();
System.out.printf("Enter cost of a Ticket  : ");
double ticketCost = Double.parseDouble(sc.nextLine());
System.out.printf("Is this a supervised tour ? [Y/N] :n");
char chosen = sc.nextLine().to Lowercase().charAt(0);
System.out.printf("What is maximum permitted tour group size?n");
int maxGroupSize = Integer.parseInt(sc.nextLine());
System.out.printf("Enter the agency contact details:n ");
String contactDetails = sc.nextLine();

int counter = 0;
String[] storedActivities;
String guide, rating;
switch (chosen) {
case 'y':
System.out.printf("How many activity are there?n");
int activities = Integer.parseInt(sc.nextLine());
while (activities < 1) {
System.out.printf("Please enter valid number of activities great than zero n");
System.out.printf("How many activity are there?n");
activities = Integer.parseInt(sc.nextLine());
}
storedActivities = new String[activities];
while (activities > counter) {
System.out.printf("Please enter  activity #%d: ", counter);
storedActivities[counter] = sc.nextLine();
counter++;
}
break;
case 'n':
System.out.printf("Enter the instruction guide:n");
guide = sc.nextLine();
System.out.printf("Enter the difficulty rating:n");
rating = sc.nextLine();
break;
default:
System.out.printf("Please Enter valid answer ");
System.out.printf("Is this a supervised tour ? [Y/N] :n");
chosen = sc.nextLine().toLowerCase().charAt(0);
break;
}
Attraction attraction = new Attraction(description, ticketCost, maxGroupSize, contactDetails, chosen, guide, rating, storedActivities[counter]);
}
private static void processSelection(char selection) {
switch (selection) {
case 'a':
createAttraction();

break;
case 'b':
System.out.println("b");
break;
case 'c':
System.out.println("c");
break;
case 'd':
break;
case 'e':
System.out.println("e");
break;
case 'f':
System.out.println("f");
break;
case 'x':
System.out.println("Good Bye!");
break;
default:
System.out.println("Invalid input, try againn");
}
}
}

public class Attraction {
private String description, contactDetails, guide, rating;
private double ticketCost;
private int maxGroupSize;
private char chosen;
private String storedActivities;

public Attraction(String description, double ticketCost, int maxGroupSize, String contactDetails,
char chosen, String guide, String rating, String storedActivities) {

this.description = description;
this.ticketCost = ticketCost;
this.maxGroupSize = maxGroupSize;
this.contactDetails = contactDetails;
this.chosen = chosen;
this.guide = guide;
this.rating = rating;
this.activities = storedActivities;
}
}

我无法让构造函数工作

Attraction attraction = new Attraction(description, ticketCost, maxGroupSize, contactDetails, chosen, guide, rating, storedActivities[counter]);

每次我把它移动到我无法进入工作,我尝试过,而如果语句和更改为开关语句,但我得到相同的错误错误,我得到无法解决变量评级,指南和storedActivities[counter]任何帮助将不胜感激

我只能使用一个数组,并且问题是按顺序排列的。

编译器正在抱怨,因为在您尝试实例化Attraction实例时,您可能还没有初始化变量。

下面几行声明了变量,但此时它们还没有被赋值:-

String[] storedActivities;
String guide, rating;

注意,如果您的代码在switch语句中输入default'n'大小写,则其中一些变量保持未设置。你需要在编译器对它拥有创建Attraction对象所需的所有信息感到满意之前修复这个问题。

你的解决方案取决于编码偏好&的需求。您可以为这些参数分配一个默认值,使用尾部递归来防止扫描程序给出错误的答案,或者在不需要所有详细信息的情况下提供一个替代构造函数。

嗨,这可能是因为你的变量在开始时没有初始化。

考虑一下:如果chosen=以外的任何,则变量rating, guide and storedActivities[]将不会被初始化。yn。JVM会自动检测到这个,并且throws会自动显示错误。

我建议你做的是将它们设置为默认大小(数组)或默认值,这样就不会发生这种错误。使用默认值还意味着您可以自动覆盖用户提供的任何不正确的值。

最新更新