4 に答える
events
スコープ内に events という名前のローカル変数がなく、メイン クラスに events という名前の静的変数がないため、メイン メソッドは何が何であるかを認識していません。次のように、特定のカレンダー オブジェクト内のイベント オブジェクトを探していることを伝える必要があります。
System.out.println(calendarObject.events[0]);
これは、2 つのクラスが同じパッケージに含まれているか、両方ともパッケージが宣言されていないことを前提としています (つまり、両方とも既定のパッケージに含まれています)。2 つのクラスが異なるパッケージにある場合は、インスタンス メンバーをパブリックとして公開するか、他のメンバーが参照できるようにアクセスするパブリック メソッドを作成する必要があります。
クラスベースのオブジェクトの考え方は、クラスを使用して複数のオブジェクトを作成できるということです。カレンダー クラスのオブジェクトを 1 つしか作成しないため、この課題ではあまりうまくいかないかもしれません。オブジェクトのメンバーを参照するには、そのメンバーを探しているオブジェクトを指定する必要があります。
まず、サイズをハードコードしないで、定数を使用すると言いました。したがって、次のように定数を作成します。
private static final int ARRAY_SIZE = 5;
そして、宣言を次のように変更します
String[] events = new String[ARRAY_SIZE];
また、アレイを初期化するときは、for-counter ループを使用して、動的ではないため、{いくつかの「-イベントは計画されていません」} ではなく、各スロットを「-イベントは計画されていません-」に設定します。一定のサイズでは変わりません。
また、コンストラクターで型宣言を削除します
String[] events
->events
型を宣言することにより、フィールドを変更するのではなく、新しいローカル変数を作成します。したがって、配列内のスロットは、変更していないためすべて null のままですが、このローカル変数内のフィールドは変更されません。
コンストラクター内でローカルevents
配列を宣言しているため、デフォルト値No event planned
はインスタンス変数に割り当てられevents
ません。
public calender() {
//Initializes your events array
events = { "-No event planned-",
"-No event planned-",
"-No event planned-",
"-No event planned-",
"-No event planned-"};
//end calender class constructor
}
それがうまくいくことを願っています
import java.util.Scanner;
//begin class driver
public class driver {
/**
* @paramargs the command line arguments
*/
//begin main method
public static void main(String[] args) {
//initiates scanner
Scanner userInput = new Scanner (System.in);
//declare variables
int dayOfWeek;
String userEvent;
//creates object for calender class
calender calenderObject = new calender();
calender.fillArray();
//user prompt
System.out.println("Enter day of week for your event in the following format:");
System.out.println("Enter 1 for Monday");
System.out.println("Enter 2 for Tuesday");
System.out.println("Enter 3 for Wednsday");
System.out.println("Enter 4 for Thursday");
System.out.println("Enter 5 for Friday");
System.out.println("Enter -1 to quit");
//collect user input
dayOfWeek = userInput.nextInt();
//user prompt
System.out.println("Please type in the name of your event");
//collect user input
userEvent = userInput.next();
//begin while loop
while (dayOfWeek != -1) {
if ((dayOfWeek>=1) && (dayOfWeek<=5)){
calenderObject.createEvent(dayOfWeek, userEvent,dayOfWeek);
for (int i=0;i<calender.length;i++){
System.out.println(calender.events[i]);
}
dayOfWeek = userInput.nextInt();
if (dayOfWeek == -1){
for (int i=0;i<calender.length;i++){
System.out.println(calender.events[i]);
}
System.exit(0);
}
System.out.println("Please type in the name of your event");
userEvent = userInput.next();
} else{
System.out.println("You have entered an invalid number");
System.out.println("Press -1 to quit or enter another day");
System.out.println("Enter 1 for Monday");
System.out.println("Enter 2 for Tuesday");
System.out.println("Enter 3 for Wednsday");
System.out.println("Enter 4 for Thursday");
System.out.println("Enter 5 for Friday");
System.out.println("Enter -1 to quit");
dayOfWeek = userInput.nextInt();
}
}
//end main method
}
}
//begin calender class
public class calender {
static int length = 5;
static String[] events = new String[length];
public static String[] fillArray(){
for (int i=0; i< length;i++){
events[i] = "-No event planned-";
}
return events;
}
//begin createEvent method
public String[] createEvent(int l, String userEvent, int dayOfWeek){
int t = l;
if(t%5 == 1 ){
events[0] = ("Monday Appoinment: ") + userEvent;
} else if(t%5 == 2 ){
events[1] = ("Tuesday Appoinment: ") + userEvent;
} else if(t%5 == 3 ){
events[2] = ("WednsdayAppoinment: ") + userEvent;
} else if(t%5 == 4){
events[3] = ("Thursday Appoinment: ") + userEvent;
} else if(t%5 == 0 ){
events[4] = ("Friday Appoinment: ") + userEvent;
}
return events;
}
//end calender class
}