2014-03-05 79 views
0
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的應檢測的字符串),仍然有這個問題:(

+0

優惠券的範圍'bestCoupon'是內部接近它宣佈的區塊。 – makata

回答

2

因爲你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 
} 
1

範圍的事項

您將該變量的範圍限制在if。如果該變量不可用,則表示不支持。

移動你的宣言Coupon bestCoupon爲循環頂端的。

然後,在循環的側

bestCoupon = new Coupon(coupons.get(i)); 

實施例:

Coupon bestCoupon= null; 
    for{ 
     if(){ 
     bestCoupon=... 
     } 
    } 
//Access here. 
0
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); 
0

變化券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); 
     } 
    }