0

申し訳ありませんが、プログラミングは初めてで、プログラムのコーディングに問題があります。元のプログラムは次のとおりです。

import java.io.*;
import java.io.IOException;
import java.io.InputStreamReader;

class buildABoat{

    String boatName;      // Boat name
    void buildABoat(){      
        String BoatName;            
    }

    void nameTheBoat() {        
        try {           
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("\n\nWhat should we name this vessel? \n\n");
            this.boatName = br.readLine();
            System.out.println("\n\nThe " + boatName + " is ready to sail!\n");             
        }           
        catch (IOException e) {                 
        }   
    }
}

class proj1{

    public static void main(String[] arg){

        buildABoat boat1;
        buildABoat boat2;
        buildABoat boat3;
        buildABoat boat4;
        buildABoat boat5;

        boat1 = new buildABoat();
        boat2 = new buildABoat();
        boat3 = new buildABoat();
        boat4 = new buildABoat();
        boat5 = new buildABoat();

        boat1.nameTheBoat();
        boat2.nameTheBoat();
        boat3.nameTheBoat();
        boat4.nameTheBoat();
        boat5.nameTheBoat();

        System.out.println("(Press ENTER to exit)");

        try {           
            System.in.read();
        }           
        catch (IOException e) {         
            return;
        }
    }
}

これにより、次のようになります。

What should we name this vessel?
Enterprise
The Enterprise is ready to sail!
What should we name this vessel?
Columbia
The Columbia is ready to sail!
What should we name this vessel?
Challenger
The Challenger is ready to sail!
What should we name this vessel?
Atlantis
The Atlantis is ready to sail!
What should we name this vessel?
Endeavor
The Endeavor is ready to sail!
(Press ENTER to exit)

これを次のように変更しようとしました。

import java.io.*;
import java.io.IOException;
import java.io.InputStreamReader;

class buildABoat{    
    String boatName;      // Boat name

    void buildABoat(){
        String BoatName;
    }

    void nameTheBoat() {
        try {           
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("\n\nWhat should we name this vessel? \n\n");
            this.boatName = br.readLine();
            System.out.println("\n\nThe " + boatName + " is ready to sail!\n");             
        }           
        catch (IOException e) {                 
        }   
    }
}

class proj1{

    public static void main(String[] arg){

        Boat[] boat;            
        boat = new Boat[5];    
        for(int i = 0; i <= Boat.Length; i++){          
            nameTheBoat();          
        }           
        System.out.println("(Press ENTER to exit)");

        try {           
            System.in.read();
        }           
        catch (IOException e) {         
            return;
        }
    }
}

もちろん、これにより次のエラーが発生します。

proj1.java:71: error: cannot find symbol
                for(int i = 0; i <= Boat.Length; i++){
                                        ^
  symbol:   variable Length
  location: class Boat
proj1.java:73: error: cannot find symbol
                        nameTheBoat();
                        ^
  symbol:   method nameTheBoat()
  location: class proj1
2 errors

新しいプログラムには何が欠けていますか?

4

8 に答える 8

2

小文字の長さを使用する

for(int i = 0; i <= Boat.length; i++)
于 2012-05-03T02:35:35.393 に答える
2

boat.nameTheBoat()ただの代わりにやってみてくださいnameTheBoat()

また

for(int i = 0; i <= boat.length; i++){          
        boat[i].nameTheBoat();          
    }    

ボートはクラスのインスタンスですBoat(おそらくそうあるべきですbuildABoat)。これらはコンパイラエラーであり、ランタイムエラーではないように見えるため、コンパイラは正確な行番号に関するヒントを(実際に)提供する必要があります。

于 2012-05-03T02:38:04.753 に答える
2

クラスではなく、オブジェクトの長さを計算する必要があります。したがって、boat.lengthである必要があります。ここで、boatはここでのオブジェクトです。

メソッドが静的メソッドの場合は、クラス名を使用してメソッドを呼び出します。

于 2012-05-03T02:40:11.317 に答える
2

Nurlanが述べているように、最初のエラーは、配列の長さプロパティに大文字のLを使用しているためです。実際のプロパティは小文字のlで始まり​​ます。

2番目のエラーは、メソッドnameTheBoatがbuildABoatという名前のクラスの一部であるが、メインクラスの一部であるかのように呼び出しようとしているためです。このメソッドを呼び出すには、 buildABoatオブジェクトのインスタンスが必要です。

もう1つの提案:Javaの命名規則に準拠するために、クラスの名前を小文字で始めないでください。クラスは常に大文字で始める必要があります。メソッドは常に小文字で始める必要があります。

于 2012-05-03T02:40:21.670 に答える
1

あなたが持っているところ

nameTheBoat();

for()ループでは、次のことが必要です。

boat[i] = new Boat();
boat[i].nameTheBoat();

理由は次のとおりです。1)nameTheBoat()タイプがのオブジェクトに対してのみ動作するメソッドですBoat。作業するオブジェクトを与えていません。2) Arrayオブジェクトを初期化しますが、boat[] = new Boat[5];オブジェクトに5つの新しいを作成しません。したがって、メソッドを実行する前に、これらの5つのそれぞれを作成する必要があります。そうしないと、nullポインタエラーが発生します。BoatArrayBoatBoat

編集:そしてもちろん、他の人が述べたように、配列のboat.length長さは間違っています。boatboat.Length

楽しみ!

于 2012-05-03T02:43:08.727 に答える
0

作成したオブジェクト配列はですboat = new Boat[5];。理想的には、コード全体は次のようになります

Boat[] boat = new Boat[5];    
for(int i = 0; i <= Boat.Length; i++){          
boat[i] = new Boat();
boat[i].nameTheBoat();          
}
于 2012-05-03T02:38:55.050 に答える
0

いくつか問題があります。

1つはboat配列としてのことです

Boat[] boat;            
boat = new Boat[5];    
for(int i = 0; i <= Boat.Length; i++){          
    nameTheBoat();          
} 

配列にアクセスするには、あなたが持っているものの代わりにlengthなります。boat.length

私が見る次の問題はへのあなたの呼び出しnameTheBoat()です。そのメソッドはbuildABoatクラスの一部です。

于 2012-05-03T02:42:37.657 に答える
0

このコードは、偶然のコンストラクターのように見えます。

class buildABoat{    
    String boatName;      // Boat name

    void buildABoat(){
        String BoatName;
    }

void buildABoat()がメソッドである場合(voidはそう言う)、なぜローカル変数を宣言し、使用しないのですか?

また、適切な名前の属性の名前をコメントとして繰り返さないでください。

class BuildABoat {    
    private String boatName;   

    public BuildABoat (String name) {
        boatName = name;
    }

これは理にかなっています。これでクラスができました。これは、クラスに保持されているボート名を渡すことでインスタンス化できます。

Proj1-Classでは、宣言と初期化を分割します。これは悪い習慣です。避けられない場合もありますが、避けられない場合は避けてください。

class Proj1 {

    public static void main(String[] arg){

        BuildABoat [] boat = new BuildABoat[5];    
        for(int i = 0; i <= boat.length; i++) {
            // to make this work, we have to change the 
            // buildABoat
            boat[i] = new BuildABoat (BuildABoat.nameTheBoat ());
        }
        System.out.println ("(Press ENTER to exit)");
        try {           
            System.in.read ();
        }           
        catch (IOException ignored) {         
            return;
        }
    }
}

メソッドnameTheBoatは、実際に(builda)boatがない状態で呼び出す場合は、静的である必要があります。

public static String nameTheBoat () {
    try {           
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println ("\n\nWhat should we name this vessel? \n\n");
        String s = br.readLine ();
        System.out.println ("\n\nThe " + s + " is ready to sail!\n");
        return s;
    }
      catch (IOException e) {
        return "";
    }   
}

コードが意図したとおりに機能することを願っています。

于 2012-05-03T02:45:47.583 に答える