1

我真的在努力使用 get/set 方法。我了解基本概念-首先设置值然后检索它。我发现用我已经学过的最小概念很难找到有关它的信息。我在第 6 章或我的第一个 Java 和编程课上,它都是在线的。我创建了其他几个使用 set/get 方法的类,但它们似乎并不适合这个项目。

public class Purchase{
   int inv;
   double sale;
   double tax;
   double taxAmount = 0.05;

public int getInv()
{
   return inv;
}
public void setInv(int inv)
{
   inv = inv;
}

public void setSale(double s)
{
   sale = s;
   tax = sale * taxAmount;
}
public double getSale()
{
   return sale;
}

//display
public void display()
{
System.out.println("Invoice number: " + getInv() + "\nSale amount: $" + getSale() + "\nTax: $" + tax + "\nTotal: $" + (tax + sale));
}
}

import java.util.Scanner;
public class CreatePurchase{
public static void main(String[] args)
{
   Purchase one = new Purchase();

   Scanner input = new Scanner(System.in);
   do
   {
   System.out.print("Please enter you invoice number. This will be a number between 1000 and 8000.  ");
   inv = input.nextInt();
   one.setInv(inv);
   }
   while(inv < 1000 && inv > 8000);
   {
   System.out.println("Please enter the amount of your sale.  ");
   sale = input.nextInt();
   }
}
}

CreatePurchase 类尚未完成,但我对其进行编译并在每次出现时为每个变量获取以下内容:

CreatePurchase.java:16: error: cannot find symbol
      inv = input.nextInt();
      ^

我的理解是创建了一个默认构造函数,所以我没有添加一个,而是在 CreatePurchase 中调用它。有什么建议么?

4

3 回答 3

2

您未能在inv任何地方声明变量,例如......

public static void main(String[] args) {
    Purchase one = new Purchase();

    // !! Variable must be declared before it can be used !! //
    int inv = 0;
    Scanner input = new Scanner(System.in);
    do {
        System.out.print("Please enter you invoice number. This will be a number between 1000 and 8000.  ");
        inv = input.nextInt();
        one.setInv(inv);
    } while (inv < 1000 && inv > 8000);
    {
        System.out.println("Please enter the amount of your sale.  ");
        // This will be your next problem...
        sale = input.nextInt();
    }
}

你的Purchase班级也会有问题...

下面的方法本质上是把invback的值赋给自己,在这种情况下是没有意义的……

public void setInv(int inv)
{
    inv = inv;
}

相反,您应该分配给Purchaseinv变量的实例......

public void setInv(int inv)
{
    this.inv = inv;
}
于 2013-09-06T01:35:12.087 回答
1

你至少有两个问题。首先,您可以创建一个与更大容器(范围)中的另一个变量同名的新变量。在这种情况下,新变量“隐藏”或“隐藏”外部变量。在您的setInv方法中,当您说 时inv = inv两个 invs 都指的是最里面的变量,即方法签名中的那个。要将参数保存到类的字段中,您需要指定外部inv: this.inv = inv;

在您的CreatePurchase班级中,您没有任何inv定义;里面有一个Purchase,但在那边,不是这里。你只需要int inv;在你的Purchase one.

基于这两个错误,我建议阅读有关Java 中变量作用域的文章或教程,以了解有关哪些变量可在何处访问的规则。

于 2013-09-06T01:36:36.970 回答
1

inv您还没有在方法中声明变量main,在这一步 inv = input.nextInt(); 将您的程序更改为以下

int inv = 0;
 Scanner input = new Scanner(System.in);
   do
   {
   System.out.print("Please enter you invoice number. This will be a number between 1000 and 8000.  ");
   inv = input.nextInt();
   if(inv >1000 & inv <8000)
        one.setInv(inv);//add to one variable only if its correct,otherwise ignore it
   }
   while(inv < 1000 && inv > 8000);
于 2013-09-06T01:38:51.307 回答