【问题标题】:JAVA questissn regarding methods/classes关于方法/类的 JAVA questissn
【发布时间】:2012-03-04 00:25:32
【问题描述】:

我对 JAVA 有点陌生。我在大学里一直在使用它,但我不得不承认,我的导师完全没有帮助。她自己几乎不知道 JAVA,但这本身就是另一个问题。我一直对方法和类的工作方式感到困惑。我正在创建这个程序,它使用两个文件,一个“主”文件和一个“测试”文件。我似乎无法正确获取“主”文件,因为编译器一直告诉我它找不到符号,即使它们是。在“测试”文件中,我似乎无法让编译器识别“主”文件中的方法。我已确保文件位于同一文件夹中。为了简单起见,我想将它们合并到一个文件中,但我会失分。到目前为止,我已经包含了我的代码。我不是在寻找“修复它”的解决方案,我只是想弄清楚它为什么不起作用。任何帮助表示感谢,因为我的导师没有太多帮助,谢谢!


主文件:

import java.util.Scanner;

class Fruit1 {
    static Scanner console = new Scanner(System.in);

    public static void main(String args[]) {

        String color;
        String taste;
    }

    public Fruit1() {
        // generic constructor

        color = "red";
        taste = "yum";

    }

    public Fruit1(String aColor, String aTaste) {
        // constructor with parameters
        color = aColor;
        taste = aTaste;
    }

    public Fruit1(String bColor, String bTaste) {

        color = bColor;
        taste = bTaste;
    }

    String getTaste() {
        return taste;
    }

    String getColor() {
        // Accessor method
        return color;
    }
}

测试文件:

import java.util.*;

public class Fruit1Test {

    static Scanner console = new Scanner(System.in);

    public static void main(String args[]){

        Fruit1 a = new Fruit1("pinkish-red", "sweet-tart");
        Fruit1 l = new Fruit1("yellow", "tart/sour");

        a.taste();
        a.color();
        l.taste();
        l.color();

        System.out.println("Your apple is " + a.color + "in color and has a " + a.taste + " taste. ");
        System.out.println("Your lemon is " + l.color + "in color and has a " + l.taste + " taste. ");
        System.out.println();
    }
}

【问题讨论】:

  • 你确定你的文件名是Fruit1.javaFruit1Test.java??
  • 请复制命令行和错误(您可以尝试使用 IDE 吗?它可以帮助您专注于学习方面。)由于您处于学习模式,因此有助于阅读有关“junit”的更多信息 -它有助于改进测试。

标签: java class methods constructor symbols


【解决方案1】:

对于您的第一个问题,您似乎误解了如何声明实例字段。您是在 main 函数中创建它们,而您应该直接在类中创建它们。

对于您的第二个问题,请参阅 Fahim Parkar 的评论,如果它适用于您的情况。顺便说一句,每个文件始终只有一个类/接口/枚举是一个好习惯,并且文件与类的名称相同(这第二部分在 Java 中可能是强制性的,我不记得了 - 它适用于public 类,但我不知道它是否也适用于“默认,包保护”类)。

如果它们命名正确,OTOH,也许错误是因为您的“主”文件没有编译,所以“测试”文件没有找到它......

附:我刚刚注意到您有两个具有相同签名(参数数量和相同参数类型)的构造函数。您必须删除一个。

【讨论】:

  • 您好!我的导师让我们放入两个构造函数,她希望我们“超载”,即使程序没有必要。有没有办法解决?好像没有,因为我只会继续出错。
  • 如果你有一个没有参数的构造函数,而另一个有,你已经重载了。您也可以拥有具有相同数量但类型不同的参数的构造函数,但这并不总是有意义的。请参阅this 了解更多信息
【解决方案2】:

您永远不会为对象Fruit1 声明字段colortaste。相反,您在 main 方法中创建了变量。

我建议您阅读一些关于 Java 的 basic tutorials 以了解其中的窍门。 (Oracle还提供更多advanced tutorials。)

【讨论】:

  • 我目前正在学习 Head First JAVA,因为我注册了我的 JAVA II 课程。我只是习惯了一切都是主要的,而我现在的教练并没有真正解释为什么一切都不应该如此。我已经阅读了教程,但老实说,它可能会让人不知所措,特别是如果你不知道为什么你做错了什么。这是我第一次真正的编程体验,除了 SQL 类,所以有时很难掌握这些概念。不过,我会再次查看教程。谢谢。
【解决方案3】:

我注意到在 Fruit1 中,您在函数 main() 中声明了成员变量。从外观上看,Fruit1Test 应该有一个 main() fxn,但 Fruit1 不应该。从 main() 中取出那些成员变量并在 Fruit1 中删除 main() (将其放在“console”变量下)。

我还注意到您有 2 个构造函数,它们都接受字符串。编译器可能也会抱怨这一点。我面前没有编译器,但这就是我可以通过查看来判断的。

【讨论】:

    【解决方案4】:

    a.taste(); 将尝试在您的主文件中查找方法taste();,即在Fruit1.java 文件中。但是由于没有找到相同的,它会在编译时抛出错误,只有 Method taste() is not found...

    所有以下 4 条语句都将失败,因为它们不存在...

    a.taste();
    a.color();
    l.taste();
    l.color();
    

    当您使用以下语句创建类的对象时,已经使用构造函数public Fruit1(String aColor, String aTaste){ 来评估品味和颜色。

    Fruit1 a = new Fruit1("pinkish-red", "sweet-tart");

    我相信您现在想要打印颜色和品味的值。要打印这些,请使用您拥有的 getter 方法 (getColor() & getTaste())

    System.out.println("Your apple is " + a.getColor() + " in color and has a " + a.getTaste() + " taste. ");
    
    System.out.println("Your Lemon is " + l.getColor() + " in color and has a " + l.getTaste() + " taste. ");
    

    注意

    你不需要再写public Fruit1(String bColor, String bTaste){,因为你已经在上面定义了......

    你下面的语句也应该在构造函数之前和psvm之外

    String color;
    String taste;
    

    如果您不清楚,请告诉我...

    祝你好运

    【讨论】:

    • 谢谢!这完全有道理!虽然,我记得必须从我所做的程序中的方法中调用属性,这很相似。为什么会找不到呢?我在下面阅读了它的原因,因为主文件没有编译,这是很有可能的。但是,当主文件正在编译时,它仍然无法访问它。那是因为我试图访问错误的方法吗?
    • a.taste(); 出现错误,因此您的System.out.println("Your apple is " + a.color + "in c 不会被打印出来...是您想要的吗?
    猜你喜欢
    • 2014-05-27
    • 1970-01-01
    • 2016-11-06
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多