如何在循环中打印方法

时间:2012-05-03 02:32:47

标签: java arrays methods

我很抱歉,但我是编程新手,编写程序时遇到了困难。原计划如下:

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

我在新计划中缺少什么?

8 个答案:

答案 0 :(得分:2)

使用小写长度

for(int i = 0; i <= Boat.length; i++)

答案 1 :(得分:2)

尝试boat.nameTheBoat()而非nameTheBoat()

另外

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

boat是类Boat的实例(可能应该是buildABoat)。这些看起来像是编译器错误而不是运行时错误,所以编译器应该给出一些提示(就像它一样)确切的行号。

答案 2 :(得分:2)

您必须尝试计算对象而不是类的长度。所以,它应该是boat.length,这里的船是你的对象

如果方法是静态方法,则使用类名调用方法。

答案 3 :(得分:2)

正如Nurlan所提到的,第一个错误是因为你使用大写L来表示数组的 length 属性。实际属性以小写l开头。

第二个错误是因为方法 nameTheBoat 是名为 buildABoat 的类的一部分,但是您尝试调用它,就像它是主类的一部分一样。您需要一个 buildABoat 对象的实例才能调用此方法。

另一个建议:要遵守java命名约定,不应该以小写字母开头的类的名称。类应始终以大写字母开头。方法应始终以小写字母开头。

答案 4 :(得分:1)

你有

的地方
nameTheBoat();

在你的for()循环中需要

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

原因是: 1)nameTheBoat()是一种仅对Boat类型的对象进行操作的方法。你没有给它任何工作的对象。 2)boat[] = new Boat[5];初始化一个Array对象,但不在Boat对象中创建5个新的Array。因此,您需要创建这5个Boat中的每一个,然后才能对它们运行Boat方法。否则你会得到一个空指针错误。

编辑:当然正如其他人所提到的,boat.length是数组boat的长度,boat.Length是错误的。

享受!

答案 5 :(得分: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();          
}

答案 6 :(得分:0)

你有一些问题。

一个是boat作为数组

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

要访问数组length,它将是boat.length而不是您拥有的数据。

我看到的下一个问题是您致电nameTheBoat()。该方法是buildABoat类的一部分。

答案 7 :(得分: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;
    }

这有点道理。你现在有了一个类,可以通过传递一个在同类中保存的boatname来实例化。

在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)船的情况下调用它。

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 "";
    }   
}

我希望代码能做到你想要的一点点。