Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中找不到符号错误-为什么?_Java - Fatal编程技术网

在Java中找不到符号错误-为什么?

在Java中找不到符号错误-为什么?,java,Java,我很难理解面向对象的世界。我正在做家庭作业,我不明白为什么我会在这里出错。我遇到的问题是add方法。我正在使用Netbeans IDE(根据教授的要求),我遇到的问题是add方法。有两个错误都是“找不到符号”;一个是指变量customers,另一个是指变量numCustomer。我试图理解我做错了什么,而不仅仅是如何纠正它 到目前为止,我所拥有的: package homework6; /** * * @author christian */ public class Homework

我很难理解面向对象的世界。我正在做家庭作业,我不明白为什么我会在这里出错。我遇到的问题是add方法。我正在使用Netbeans IDE(根据教授的要求),我遇到的问题是
add
方法。有两个错误都是“找不到符号”;一个是指变量
customers
,另一个是指变量
numCustomer
。我试图理解我做错了什么,而不仅仅是如何纠正它

到目前为止,我所拥有的:

package homework6;

/**
 *
 * @author christian
 */

public class Homework6 {
    // Declare variables
    private int numCustomers = 0;
    private Customer customer;

    // Constructor
    public Homework6() {
        Customer[] customers = new Customer[50];
    }

    /**
     * @param args the command line arguments
     */
    public void main(String[] args) {
        System.out.println("Christian Beckman N00963294");
        System.out.println("Homework 6");
        System.out.println(); // Prints a blank line

        // Create and instance of Homework6
        Homework6 homework6 = new Homework6();
        homework6.execute(args);
    }

    private void add(Customer customer) {
        int i = 0;
        customers[i] = customer;
        i++;
        numCustomer++;
    }

    private void displayCustomers() {

    }

    private void execute(String[] args) {

    }

    private int getTotal() {

    }

    private void readFile(String filename) {

    }
}

您的变量是
numCustomers
,带有“s”,但您的方法引用了
numCustomer++不带“s”

应该是:

numCustomers++;
为了

可能是:

private Customer[] customers;

在提到客户和客户的代码中要非常小心。看起来您只对一个使用约定“客户”,而对阵列使用约定“客户”。如果这对你来说太微妙了,那么考虑改变为OnCuuSuver和AuthCuffes之类的东西。

< p>在构造函数中创建一个<代码>客户> /Cord>对象数组,然后立即销毁数组。尝试这样声明:

public class Homework6 {
    // Declare variables
    private int numCustomers = 0;
    private int i = 0;
    private Customer customer;
    private Customer[] customers;

    // Constructor
    public Homework6() {
        customers = new Customer[50];
    }
...
原因是,在方法(在本例中为构造函数)内声明的任何变量都有一个称为局部范围的东西,这意味着只能在该方法内访问它。在方法外部声明的变量有一个称为全局范围的东西,这意味着可以跨类中的所有方法访问该变量

出于与上述相同的原因,
i
将在每次调用add函数时保持重置为0。要解决这个问题,请在构造函数上方用其他变量声明
private int i=0
。然后写下这样的方法:

private void add(Customer customer) {
        customers[i] = customer;
        i++;
        numCustomers++;
    }

此外,无论何时在add方法中执行
numCustomer++
,都应该像上面一样放置
numCustomers++
,因为您在声明
numCustomers
时,末尾带有一个“s”。必须精确匹配。

您的构造函数声明了一个名为
构造函数的新变量
;因为它不是一个字段,所以它被创建,然后立即被销毁。也许你想把它作为一个领域…?我不明白你的意思。这不是唯一的一个。是的,当你评论时,我正在添加到我的帖子中。:)
add
方法还有一个不需要的
i
。谢谢你的建议,这是一个非常好的主意。我确实因为这些相似之处而感到困惑。当你说add方法不需要I时,我不知道你的意思(4castle)。我现在意识到,范围将无法实现我的意图。我想让它增加数组索引,但为了实现这一点,我需要使其全局化。这就是你所指的吗?好的,我只是回到这个问题上来。我有点困惑,为什么你说我的构造函数中的数组是创建的,然后立即销毁。我的教授说,显式创建特定大小数组的方法是。。。。。。。ArrayType[]nameOfArray=新的ArrayType[arraySize];我看到了变量“I”的作用域和变量名不是numCostomers++的问题。感谢您的帮助,如果您能解释一下我在上面提到的阵列问题上犯了什么错误,我将不胜感激。提前谢谢。@user43378您可以将变量声明为全局变量或局部变量。全局变量可以在整个类中使用,而局部变量只能在单一方法中使用。由于将
Customer[]customers
放入构造函数中,因此将数组设置为局部变量。此数组只能在构造函数中使用,因为它具有本地作用域。如果在上面的示例中那样的方法之外声明数组,则该数组具有全局作用域。由于您在任何方法之外声明了它,所以它可以在整个类中使用。谢谢您,这非常有意义,但我从未想到过它,因为它是一个数组
private void add(Customer customer) {
        customers[i] = customer;
        i++;
        numCustomers++;
    }