2014-11-02 11 views
-1

좋아, 그래서 세 클래스를 만들었습니다. 하나는 테스터이고 다른 두 개는 청사진 클래스입니다. 청사진 클래스 인 ScanShop에서 ShoppingCart로 개인 이중 카트 변수를 호출 할 수 없습니다. 접근 자 및 getter 사용을 생각했지만 현재 혼란스러워하고 어디서 잘못 될지 모릅니다. 드디어 내 테스터 클래스입니다다른 클래스의 변수를 호출 JAVA

package exercise3; 

import java.util.Scanner; 
import javax.swing.JOptionPane; 
public class ShoppingCart 
{ 
ScanShop amount = new ScanShop(); 





public void getbill() 
{ 

    JOptionPane.showMessageDialog(null,"your total is: " + amount.getcart()); 
} 

public void billCal() 
{ 
    String answer; 
    int number; 
    Scanner input = new Scanner(System.in); 

    /*System.out.println("please enter how much your bill is:..."); 
    //how much bill is: 
    cart = in.nextDouble(); 
    in.nextLine(); 
    System.out.printf("you have entered: %.2f", cart);*/ 

    System.out.println("Do you have a loyalty card? y or n"); 
    // asking do you have loyalty card 
    answer= input.next(); 

    if (answer.equalsIgnoreCase("y")) 
    { 

     amount.setcart(amount.getcart()*0.9); 

     //other vouchers to discount 
     System.out.println("thats great! do you have a voucher: " 
       + "\n(1) £5 " 
       + "\n(2) £10 " 
       + "\n (3) no vouchers"); 
     number= input.nextInt(); 
     switch(number) 
     { 
     case 1 : 
      amount.setcart(amount.getcart()-5); 
      getbill(); 
      break; 

     case 2 : 
      amount.setcart(amount.getcart()-10); 
      getbill(); 
      break; 

     default : 
      getbill(); 
      break; 
     } 
    } 

    else 
    { 
     getbill(); 
    } 

    input.close(); 
}//closing billCal 

} 

: 그리고 여기

package exercise3; 
import java.util.Scanner; 
public class ScanShop 
{ 
private double cart =0; 

public double getcart() 
{ 
    return cart; 
} 
public void setcart(double cart) 
{ 
    this.cart =cart; 
} 
public void scan() 
{ 

    //the prices of items 
    double p1; 
    double p2; 
    double p3; 
    double total; 

    Scanner in = new Scanner(System.in); 

    System.out.println("what price is item one?"); 
    p1 = in.nextDouble(); 
    System.out.println("What is price of item two?"); 
    p2= in.nextDouble(); 
    System.out.println("And what is the price of the third item?"); 
    p3= in.nextDouble(); 

     total = p1 + p2 + p3; 


    System.out.printf("The total bill is %.2f\n\n", total); 


    setcart(total); 

    System.out.println("the cart is: " + getcart()); 

    in.close(); 




} 
} 

은 shoppingCart 청사진 클래스입니다 : 여기 내 코드는

package exercise3; 

public class ShoppingCart_Test { 
public static void main (String [] arg){ 
    ShoppingCart customerOne = new ShoppingCart(); 
    //c1 is customer one 
    ScanShop c1 = new ScanShop(); 


    c1.scan(); 
    customerOne.billCal(); 


} 
} 
+0

이 질문이 나타납니다 OO 프로그래밍에 대한 소개가 필요하기 때문에 주제를 벗어나야합니다. 스택 오버플로는 훌륭한 책, 튜토리얼 또는 교사를 대신 할 수 없습니다. –

+0

'in.close();'NoSuchElementException이 발생하여 프로그램이 중단되는 것을 알고 계셨습니까? – Radiodef

답변

2

는 당신의 private 변수에 도달 할 수 다른 클래스의 클래스. private 필드는 필드의 소유자 클래스에서만 액세스 할 수 있습니다.

개인 필드의 값을 가져 오려면 해당 필드에 공용 getter 메서드를 만들어야합니다.

+0

그래서 ScanShop 클래스에서 바뀌 었습니다 : 개인용 이중 카트를 공용 이중 카트로 변경 했는데도 여전히 동일한 오류가 발생합니다. 공개 게터와 세터는 비공개와 같은가요? – Crazypigs

2

당신의 billCal 방법 '을 shoppingCart가에서의 카트 변수'ScanShop를 사용하려는 경우 당신이 그것에 숫자 (더블) 작업을하도록 변경해야합니다. 테스터에 두 개의 이미지를 모두 만들려면 ScanShop 인스턴스를 ShoppingCart 안에 만들지 마십시오. 이처럼 billCal을

public void getbill(double total) 
{ 
JOptionPane.showMessageDialog(null,"your total is: " + total); 
} 

및 수행 :처럼이에 코드를 변경 이것에

public void billCal(Double totalAmount) 
{ 
    (...) 
switch(number) 
    { 
    case 1 : 
     getbill(totalAmount-5); 
     break; 
    (...) 
} 

그리고 마지막으로 당신의 주요 방법 :

public static void main (String [] arg){ 
ShoppingCart customerOne = new ShoppingCart(); 
ScanShop c1 = new ScanShop(); 


c1.scan(); 
customerOne.billCal(c1.getCart()); 

}

+0

그렇게 해 주셔서 감사합니다.하지만 같은 테스터에서 두 가지 수업을 사용할 수 있는지 알고 싶었습니다. – Crazypigs