楽器の弦の名前の配列は、Instrument クラスの必須フィールドですが、プログラムを簡素化するために、楽器のチューニングが各弦で個別に行われないソリューションを受け入れます。ただし、弦ごとに作業したい場合は、第 8 週のアディショナル ノートに良い例があり、チューバに代表される別のクラスの楽器が考慮されています。
リスト 8.3 と 8.4 をモデルとして使用して、プロジェクト 3 のコードを 2 つの別個のクラスに編成してください。1 つは計測器を定義するためのもので、もう 1 つは計測器をテストするためのものです。
そのようなメソッドが標準出力に直接書き込む要件の例とは異なり、Instrument クラスのメソッドが String を返すようにします。これが必要なのは、テスト クラスの出力をコマンド ラインでユーザーが指定したファイルに書き込む必要があるためです。
テスト クラスでは、Instrument 型の 10 個の要素を含む配列を用意し、Instrument クラスのインスタンスを (クラス コンストラクターで new 演算子を使用して) 配列に入力し、while または for ループを使用してテストを実行する必要があります (つまり、各配列要素で Intrument クラス メソッドを呼び出します)。
要件で指定されているように、テスト クラスはコマンド ラインで引数を使用して開始する必要があります。
java Mynamep3tst myfilename.txt
ここで、myfilename.txt は、すべての出力が必要なファイルです。このファイル名は、プログラム内で次のように使用する必要があります (リスト 14.13 を参照)。
java.io.File file = new java.io.File(args[0]);
java.io.PrintWriter output = new java.io.PrintWriter(file);
ファイルに送信するメッセージがある場合は、
output.println(message);
*私の質問は、配列instrumentContentを使用してforループ内でinstrumentクラスの新しいオブジェクトを作成しようとするたびに、エラーが発生することです。この方法で新しいオブジェクトを作成することが許可されていない場合、私には理解できません。このようにすることが許可されていない場合、各配列が使用されるようにする適切な方法は何ですか? *
class StringInstrument {//begin class
//declare variables
boolean isTuned;
boolean isPlaying;
boolean band;
public String nameOfInstrument;
int numberOfStrings;
String nameofStringsInInstrument[] = {"E", "A", "D", "G", "B"}; //an array of string names
public StringInstrument() {//begin contructor
numberOfStrings = 5;
isTuned = false;
isPlaying = false;
band = false;
}//end constructor
public int NumberOfStrings(int stringNumber){//begin method
System.out.println("The number of strings for the " + nameOfInstrument + " is " + stringNumber );
return this.numberOfStrings = stringNumber;
}//end method
public String InstrumentNameGet() {//begin method
return nameOfInstrument;
}//end method
public void SetInstrumentName (String instrumentName) {//begin getter method
nameOfInstrument = instrumentName;
}//end method
public String InstrumentNameDisplay() {//begin method
System.out.println("Your instrument is the " + nameOfInstrument);
return nameOfInstrument;
}//end method
public boolean PlayInstrument(){//begin method
System.out.println("You are playing your " + nameOfInstrument);
return isPlaying = true;
}//end method
public boolean TuneInstrument(){//begin method
System.out.println("Tune " + nameOfInstrument);
return isTuned = true;
}//end method
public boolean stopTuneInstrument() {//begin method
System.out.println("The" + nameOfInstrument + " is out of tune.");
return isTuned = false;
}//end method
public boolean StopPlayInstrument() {//begin method
System.out.println("The " + nameOfInstrument + " has stopped playing");
return isTuned = false;
}//end method
public boolean PlayInstrumentBand() {//begin method
System.out.println("The " + nameOfInstrument + " is playing in a band");
return band = true;
}//end method
public boolean StopPlayInstrumentBand() {//begin method
System.out.println("The " + nameOfInstrument + " has stoped playing with the band");
System.out.println("\n");
return band = false;
}//end method
}// クラス終了
public class RandyGilmanP3 {//begin クラス
public static void main(String[] args) throws Exception{//begin main
java.io.File file = new java.io.File("RandyGilmanP3.txt");
//create a file
java.io.PrintWriter output = new java.io.PrintWriter(file);
//Declaring, creating, and intialize arrays
String[] instrumentList = new String [10];
String[] instrumentContent = new String [10];
int[] stringNumber = new int [10];
//input string names into array
instrumentList[0] = "Guitar";
instrumentList[1] = "Violin";
instrumentList[2] = "Bass Guitar";
instrumentList[3] = "Cello";
instrumentList[4] = "Banjo";
instrumentList[5] = "Sitar";
instrumentList[6] = "Rabab";
instrumentList[7] = "Viola";
instrumentList[8] = "Harp";
instrumentList[9] = "Ukulele";
//input string amounts into array
stringNumber[0] = 5;
stringNumber[1] = 4;
stringNumber[2] = 5;
stringNumber[3] = 4;
stringNumber[4] = 5;
stringNumber[5] = 18;
stringNumber[6] = 3;
stringNumber[7] = 4;
stringNumber[8] = 47;
stringNumber[9] = 4;
for (int i = 0; i < instrumentContent.length; i++){//begin for loop
StringInstrument instrumentList[i] = new StringInstrument();
output.println(instrumentList[i].InstrumentNameDisplay());
output.println(instrumentList[i].NumberOfStrings(stringNumber[i]));
output.println(instrumentList[i].TuneInstrument());
output.println(instrumentList[i].PlayInstrument());
output.println(instrumentList[i].PlayInstrumentBand());
output.println(instrumentList[i].StopPlayInstrument());
}//end for loop
}//end main
}//end class