关于方法/类的JAVA questissn

时间:2012-02-12 04:03:43

标签: java class methods constructor symbols

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


主要文件:

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();
    }
}

4 个答案:

答案 0 :(得分:1)

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

我建议你阅读一些关于Java的basic tutorials以获得一些东西。 (Oracle还提供了更多advanced tutorials。)

答案 1 :(得分:1)

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

我还注意到你有2个构造函数都接受字符串。编译器也可能会抱怨这一点。我面前没有编译器,但这就是我从中看到的。

答案 2 :(得分:1)

a.taste();会尝试在主文件中找到方法taste();,即在Fruit1.java文件中。但是,如果找不到相同的内容,只会在找不到方法taste()的情况下在编译时抛出错误...

所有低于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;

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

祝你好运

答案 3 :(得分:0)

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

对于您的第二个问题,请参阅Fahim Parkar的评论,如果它适用于您的情况。 BTW这是一个很好的做法,每个文件总是只有一个类/接口/枚举,并且文件具有相同的类名(第二部分在Java中可能是强制性的,我不记得肯定 - 它适用于public类,但我不知道它是否也适用于“默认的,受包保护的”类。)

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

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