无法找到对象符号错误和定义
问题描述:
1 // This program reads in an item's cost and some coupons' information,
2 // and then determines which is the best coupon to use and the amount
3 // to pay.
4
5 import java.util.*;
6
7
8 public class Redeem {
9
10 public static void main(String[] args) {
11 Scanner sc = new Scanner(System.in);
12 double price = sc.nextDouble();
13 int size = sc.nextInt();
14 int i=0;
15 double amtPay = price;
16 double negativeAmt= -99999.99;
17
18 ArrayList<Coupon>coupons = new ArrayList<Coupon>(size);
19
20 for(i=0; i<size; i++) {
21 Coupon newCoupon = new Coupon(sc.next(), sc.nextDouble());
22 coupons.add(i, newCoupon);
23 sc.nextLine();
24 }
25
26 for(i=0; i<size; i++) {
27 double temp = (coupons.get(i)).payment(price);
28 if (temp < 0) {
29 if (temp > negativeAmt) {
30 negativeAmt = temp;
31 Coupon bestCoupon = new Coupon(coupons.get(i));
32 }
33 amtPay = 0.00;
34 }
35 else {
36 if (amtPay != 0) {
37 if (temp < amtPay) {
38 amtPay = temp;
39 }
40 Coupon bestCoupon = new Coupon(coupons.get(i));
41 }
42 }
43 }
44 System.out.println("Best choice: " + bestCoupon);
45 System.out.printf("You need to pay $%.2f\n", amtPay);
46 }
47 }
我不断收到错误无法找到对象符号错误和定义
Redeem.java:44: error: cannot find symbol
System.out.println("Best choice: " + bestCoupon);
^
symbol: variable bestCoupon
location: class Redeem
1 error
为什么它没有看出它是优惠券类的对象?我编我的优惠券类在此之前(含一个toString方法,因此println的应检测的字符串),仍然有这个问题:(
答
因为你在if
的范围内声明它helppp,它是只知道有:
if(temp > negativeAmt) {
negativeAmt = temp;
Coupon bestCoupon = new Coupon(coupons.get(i));
//bestCoupon is known here
}
//But not here
更普遍的例子:
if(something) {
int a;
if(somethingElse) {
int b;
a = b; //OK
}
b = a; //Error, b is not known here
}
答
范围的事项
您将该变量的范围限制在if
。如果该变量不可用,则表示不支持。
移动你的宣言Coupon bestCoupon
为循环顶端的。
然后,在循环的侧
bestCoupon = new Coupon(coupons.get(i));
实施例:
Coupon bestCoupon= null;
for{
if(){
bestCoupon=...
}
}
//Access here.
答
Coupon bestCoupon =null;
for(i=0; i<size; i++) {
...
bestCoupon = new Coupon(coupons.get(i)); //not Coupon bestCoupon = new Coupon(coupons.get(i));
...
}
System.out.println("Best choice: " + bestCoupon);
答
变化券bestCoupon like--
public class Redeem {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double price = sc.nextDouble();
int size = sc.nextInt();
int i=0;
double amtPay = price;
double negativeAmt= -99999.99;
Coupon bestCoupon =null; //<-- Declaration of Coupon
ArrayList<Coupon>coupons = new ArrayList<Coupon>(size);
for(i=0; i<size; i++) {
Coupon newCoupon = new Coupon(sc.next(), sc.nextDouble());
coupons.add(i, newCoupon);
sc.nextLine();
}
for(i=0; i<size; i++) {
double temp = (coupons.get(i)).payment(price);
if (temp < 0) {
if (temp > negativeAmt) {
negativeAmt = temp;
bestCoupon = new Coupon(coupons.get(i));
}
amtPay = 0.00;
}
else {
if (amtPay != 0) {
if (temp < amtPay) {
amtPay = temp;
}
bestCoupon = new Coupon(coupons.get(i));
}
}
}
System.out.println("Best choice: " + bestCoupon);
System.out.printf("You need to pay $%.2f\n", amtPay);
}
}
优惠券的范围'bestCoupon'是内部接近它宣布的区块。 – makata