【问题标题】:Working between classes in Java在 Java 中的类之间工作
【发布时间】:2013-12-14 00:53:36
【问题描述】:

我仍在为在 Java 中使用不同类的想法而苦苦挣扎,我无法弄清楚我的代码有什么问题。在String field[][]= makeField();printPattern(field); 的主类中,我收到一条错误消息。有人可以向我解释我做错了什么吗?提前谢谢!

java.util.Scanner;
//main class
public class Game {
    public static int rows;
    public static int colomn;
    public static String name;
    public static void main(String[] args) {
        Scanner in= new Scanner(System.in);
        //System.out.println("Please enter your name:");
        //name= in.next();
        System.out.println("Please enter the number of rows:");
        rows=in.nextInt();
        System.out.println("Please enter the number of colomns:");
        colomn=in.nextInt();
        String field[][]= makeField();*// this is where I get the error from eclipse*
        printPattern(field);**
    }
}

public class playingField extends Game{
    //creates an empty field
    public String [][] makeField(){
        String [][]field= new String[rows+1][colomn];
        for (int i=0; i<rows+1; i++) { 
           for (int j=0; j<colomn; j++) {
              if (i==0)
              {
                 field[i][j]=" "+(j+1);
              } else {
                  field[i][j]="|_";
                }
              if (i!=0 && j==colomn-1) { 
                 field[i][j]="|";
              }
           }
        }
        return field;
     }

//print pattern
public static void printField(String [][] field) {
   for (int i=0; i<rows+1; i++) {
      for (int j=0; j<colomn; j++) {
         System.out.print (field [i][j]);
      }
      System.out.println();
   }
}   

【问题讨论】:

  • 具体是什么错误?
  • 一般来说,类的第一个字母应该使用大写——这是一种风格。
  • 感谢您的回复和提示——我对编程还是很陌生。错误消息显示“方法 makefield() 无法识别 Game 类型”
  • 我也收到 printPattern(field) 的相同错误消息...

标签: java class methods


【解决方案1】:

Game 没有makeField() 方法。您需要引用playingField 类才能使用该方法。与printPattern()相同

String field[][] = playingField.makeField();
                       ^^              
playingField.printPattern(field);*

注意:请遵循 Java 命名约定,类的首字母使用大写字母

编辑: makeField() 不是 static

  • 需要实例化playingField才能使用makeField方法
  • 没有printPattern 方法。也许你想要printField(field),它也必须从playerField 类中引用。

试试这个:

playingField field = new playingFiled()
String field[][] = field.makeField();
palyingField.printField(field);

【讨论】:

  • makeField() 方法是不是 static。您不能以静态方式使用它。
【解决方案2】:

您正在使用 PlayingField 类中的两种方法。

方法makeField() 是一个non-static 方法,需要PlayingField 类的实例 才能运行。

    PlayingField pf = new PlayingField;
    String field[][]= pf.makeField();

方法printField() 被声明为static,因此它不需要PlayingField 类的实例来运行(尽管您也可以将它与实例一起使用。

    PlayingField.printField(field); 

或者(使用已经存在的实例)

    pf.printField(field);

【讨论】:

    【解决方案3】:

    您的方法makeField() 不是静态的,而printPattern() 是静态的。您还应该将playingField 重命名为PlayingField。但是,你可以试试

     String field[][]= new playingField().makeField(); // construct a playingField instance
     playingField.printPattern(field); // use a static method from the playingField class
    

    【讨论】:

      猜你喜欢
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多