【问题标题】:Using a constructor in another class? [duplicate]在另一个类中使用构造函数? [复制]
【发布时间】:2021-07-09 09:56:16
【问题描述】:

对 Java 很陌生,所以如果这里有任何错误的术语或一些简单的错误,我们深表歉意。我试图通过调用 Main 中的构造函数方法(我在 Player 中声明构造函数)在另一个类(Main)中创建一个类(Player)的对象。我收到“找不到符号”错误,这对我来说意味着我已经在构造函数范围之外声明了变量,但我真的不知道。代码如下:

玩家:

    public class Player { 

  public Player(String Name, int MA, int ST, String AG, String PA, String AV, int Cost, String Skills) {
    Name = "BLANK";
    MA = 0;
    ST = 0;
    AG = "1+";
    PA = "1+";
    AV = "1+";
    Cost = 0;
    Skills = "None";

  }     //Declares all class attributes as parameters for when a new object is created. Target numbers and skills are strings, simple numbers are integers

主要:

import java.util.Scanner;


//goals: select from teams, store player data in external files, allow roster editing, show recommended rosters


class Main {
  public static void main(String[] args) {

    Scanner Input = new Scanner(System.in); //scanner object called Input to allow input

    System.out.println("BB2020 TEAM BUILDER");
    
    Player NewPlayer = new Player("Human Lineman", 6, 3, "3+", "4+", "9+", 50, "None");
    System.out.println(NewPlayer.Name);
    
    
  }
}

如果这是一个常见或简单的问题,再次抱歉,感谢您的帮助:)

【问题讨论】:

  • 嗨,马修。你有包裹吗?你是如何编译你的源代码的?
  • 嗨,马修,您能否也添加编写这些类的文件的路径?
  • @SergeyAfinogenov 进行此更改后,同样的问题仍然存在
  • 我正在使用 Repl.it 的 Java 编译器,并且我已经导入了 Scanner 类。我无法提供文件路径,因为 repl 不允许 @KeyMaker00 @ MD.Tabish Mahfuz
  • 如果 Player.java 文件位置与 Main.java 不同,则在 Main 类中使用 import 语句来获取 Player 的访问权限。在构造函数中使用 this.name 并在 Player 类中创建公共字段或使用 setter 和 getter 方法。将主要公开。对变量使用小写。 @马特琼斯

标签: java class constructor


【解决方案1】:

这一行是你的问题System.out.println(NewPlayer.Name);

它给您错误的原因是在名为 Name 的 Player 类中没有值/字段。要解决此问题,您需要在类(而不是方法)内创建变量。例如,这样就可以解决问题:

public class Player { 
    //Create empty class variables
    String Name;
    int MA;
    int ST;
    String AG;
    String PA;
    String AV;
    int Cost;
    String Skills;

    public Player(String Name, int MA, int ST, String AG, String PA, String AV, int Cost, String Skills) {
        //Assign the values passed into this method to the class variables using the "this" keyword
        this.Name = Name;
        this.MA = MA ;
        this.ST = ST ;
        this.AG = AG ;
        this.PA = PA ;
        this.AV = AV ;
        this.Cost = Cost ;
        this.Skills = Skills ;
    }
}

现在将打印正确的输出:

Human Lineman

警告:在 Java 中有一个通用的代码约定,即永远不要在开头使用大写字母命名变量(而不是 String Name; 使用 String name;),这样做是为了明确什么是变量以及什么是一个类(只有类的开头应该有一个大写字母)。它有助于解决问题并提供干净一致的代码。在您未来的项目中尝试一下。

【讨论】:

    【解决方案2】:
    1. 在构造函数中使用 this."fieldName" 并在 Player 类中创建此类字段。您可以使用 getter 方法在其他类中获取该字段。
    2. 如果 Player.java 文件位置与 Main.java 不同,则在 Main 类中使用 import 语句来访问 Player。
    3. 将 Main 设为公开。

    附:变量首字母小写

    【讨论】:

      【解决方案3】:

      首先,正如我上面所说,您需要先定义变量。 其次,您可以使用“System.out.println(NewPlayer.Name);”如果您将变量定义为“公共” - 例如“公共字符串名称”, 另一种方法是将变量定义为“私有”-“私有字符串名称”,并在“播放器”类中使用 variable.get() 方法

      【讨论】:

      • 注意:变量不需要声明为公共的(默认情况下它们可以通过类对象访问),除非它们也是静态的(这不是 OP 试图做的)。跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 2012-06-22
      • 2019-01-14
      • 2016-09-19
      • 2015-07-02
      相关资源
      最近更新 更多