2017-03-28 10 views
0

を更新できるように、別のクラスから変数を呼び出すようにしようとしています。は、私は私が私が間違ってこの質問を築いてきた場合、私はここにとても残念に多くの質問をしていない変数

私は、メインクラス内の変数AmountOfTicketsを呼び出すようにしようとしています。だから私はそれをwhileループの各ループで更新することができます。私はエラーを表示する日食なしで変数を正しく呼び出す方法を知らない。

この

は私がこれは私が変数を呼び出すようにしようとしている主なプログラム・コードである

public class TicketHandler { 
    public int TicketCost; 
    public static int AmountOfTickets; 

    public TicketHandler(int TicketCost, int AmountOfTickets){ 
     this.TicketCost = TicketCost; 
     this.AmountOfTickets = AmountOfTickets; 
    } 

    public TicketHandler() { 
     TicketCost = 200; 
     AmountOfTickets = 50; 
    } 

    public int getTicketCost() { 
     return TicketCost; 
    } 

    public void setTicketCost(int ticketCost) { 
     TicketCost = ticketCost; 
    } 

    public static int getAmountOfTickets() { 
     return AmountOfTickets; 
    } 

    public void setAmountOfTickets(int amountOfTickets) { 
     AmountOfTickets = amountOfTickets; 
    } 

    public void ReduceNoOfTickets(int TicketsSold) { 
     this.AmountOfTickets = this.AmountOfTickets - TicketsSold; 
    } 
} 

を更新しようとしています 変数AmountOfTicketsを作成し、

import java.util.Scanner; 
public class ApplicationProgram { 

    static Scanner inKey = new Scanner(System.in); 

    public static void main(String[] args) { 
     TicketHandler Red = new TicketHandler (200,50); 
     TicketHandler Green = new TicketHandler (200,50); 
     TicketHandler Blue = new TicketHandler (200,50); 
     TicketHandler Yellow = new TicketHandler (200,50); 

     boolean running = true; 

     //Main menu 
     while (running) { 
      printMenu(); 
      int KeyIn = inKey.nextInt(); 

      //menu 
      switch (KeyIn) { 
       case 1:{ 
        RedRoute(); 
        break; 
       } 
       case 2:{ 
        GreenRoute(); 
        break; 
       } 

       case 3:{ 
        BlueRoute(); 
        break; 
       } 
       case 4:{ 
        YellowRoute(); 
        break; 
       } 

       case 5:{ 
        ShowAvailableTicketsAndPrice(); 
        break; 
       } 

       case 6:{ 
        System.out.println("Do you wish to quit: type Y to confirm"); 
        String quitYN = inKey.next(); 
        //System.out.println(quitYN); 
        if ((quitYN.matches("Y")) || (quitYN.matches("y"))) { 
         System.out.println("Goodbye\n\n"); 
         running = false; 
         System.exit(0); 

        } 
        break; 
       } 
       default:{ 
        System.out.println("Not a valid option, try again."); 
        break; 
       } 
      } 
     } 
    } 

    public static void printMenu(){ 
     System.out.println("Bus Tickets"); 
     System.out.println("---- ----"); 
     System.out.println("1. \tRedRoute"); 
     System.out.println("2. \tGreenRoute"); 
     System.out.println("3. \tBlueRoute"); 
     System.out.println("4. \tYellowRoute"); 
     System.out.println("5. \tShowAvailableTicketsAndPrice"); 
     System.out.println("6. \tQuit"); 
    } 

    public static void RedRoute(){ 
     Scanner Red = new Scanner(System.in); 
     System.out.println(); 
     int count = 200; 
     while (count <= 200) { 
      System.out.println("Insert £" + count); 
      int KeyIn = Red.nextInt(); 
      count = count - KeyIn; 

      if (count == 0){ 
       System.out.println("Enjoy"); 
       break; 
      } 
     } 
    } 

    public static void GreenRoute(){ 

     Scanner Red = new Scanner(System.in); 
     System.out.println(); 
     int count = 200; 
     while (count <= 200){ 
      System.out.println("Insert £" + count); 
      int KeyIn = Red.nextInt(); 
      count = count - KeyIn; 

      if (count == 0){ 
       System.out.println("Enjoy"); 
       break; 
      } 
     } 
    } 

    public static void BlueRoute(){ 

     Scanner Red = new Scanner(System.in); 
     System.out.println(); 
     int moneyin = 200; 
     while (moneyin <= 200){ 
      System.out.println("Insert £" + moneyin); 
      int KeyIn = Red.nextInt(); 
      moneyin = moneyin - KeyIn; 

      if (moneyin == 0){ 
       System.out.println("Enjoy"); 
       AmountOfTickets = get.AmountOfTickets - 1 
       break; 
      } 
     } 
    } 

    public static void YellowRoute(){ 

     Scanner Red = new Scanner(System.in); 
     System.out.println(); 
     int count = 200; 
     while (count <= 200) { 
      System.out.println("Insert £" + count); 
      int KeyIn = Red.nextInt(); 
      count = count - KeyIn; 

      if (count == 0){ 
       System.out.println("Enjoy"); 
       break; 
      } 
     } 
    } 

    public static void ShowAvailableTicketsAndPrice(){ 
     System.out.println("Routes available:"); 
     System.out.println("\tRed route, Tickets left: "+ "Price: "); 
     System.out.println("\tBlue route, Tickets left: " + "Price: "); 
     System.out.println("\tGreen route, Tickets left: " + "Price: "); 
     System.out.println("\tYellow route, Tickets left: " + "Price: "); 
    } 
} 
それを使用しているクラスです。

ありがとうございます。

+0

質問がありません –

+0

あなたは「AmountOfTickets = get.AmountOfTickets - 1'について話していますか? – TheBakker

+0

申し訳ありませんが、AmountOfTickets変数をメインクラスで呼び出そうとしています。だから私はそれをwhileループの各ループで更新することができます。私は正しくエラーを表示して日食なしで変数を呼び出す方法がわからない –

答えて

0

まず第一に、あなたのVaRはAmountOfTicketsと呼ばれ、それは一つのコピーがあなたの方法のgetAmountOfTicketsまた、すべてのオブジェクトに生きる意味、静的です。

あなたは、このようClassName.YourVarを使用して変数を呼び出す必要があり、ここで

  AmountOfTickets = get.AmountOfTickets - 1 

問題を抱えている:

  TicketHandler.AmountOfTickets = TicketHandler.getAmountOfTickets() - 1; 

もあなたの方法。

また、あなたがこのような静的インポートすることができます:

「あなたがオブジェクトを作成し、このようにVARを呼び出すことで考えること」

  AmountOfTickets = getAmountOfTickets() - 1; 

 import java.util.Scanner; 

    import static huh.TicketHandler.*; 

ので、あなたが使用することができますが

public static void BlueRoute(){

Scanner Red = new Scanner(System.in); 
    TicketHandler objectOne = new TicketHandler(); //HERE I CREATED AN OBJECT 
    System.out.println(); 
    int moneyin = 200; 
    while (moneyin <= 200) 
    { 
     System.out.println("Insert £" + moneyin); 
     int KeyIn = Red.nextInt(); 
     moneyin = moneyin - KeyIn; 

     if (moneyin == 0){ 
      System.out.println("Enjoy"); 

      objectOne.AmountOfTickets = objectOne.getAmountOfTickets() - 1; //HERE I USED IT 

      break; 
    } 

しかし、これは静的なものであるとして、それはそう

  TicketHandler.AmountOfTickets = TicketHandler.getAmountOfTickets() - 1; //HERE I USED IT 

にobjectOneに置き換えられます、私の謙虚な意見では、あなたのことができたり(そう、あなたの静的前に同じクラス名を書くために避ける)、または置く輸入静的を使用あなたのクラスの名前、そして名前とメソッド。

あなたと同じ名前またはメソッドを持つ別のクラスがあり、インポートされた場合、インポートスタティックを使用すると、コンパイラが、どちらを使用すると思いますか? TicketHandler.AmountOfTicketsこの::TicketHandler.getAmountOfTickets()すべてのApplicationPrograのクラスのコードで使用するためのavableある

だから、私はむしろ

はそれがところでこれを使用して

を役に立てば幸いfullnameClass.varOrMethodを使用したいです私が言ったように、それは静的であるため、そしてあなたがdifinedので、彼らは公共

public static int AmountOfTickets; 
    public static int getAmountOfTickets() { 

     return AmountOfTickets; 
    } 

=)私はそれはあなたが何を求めていたと思います。c-ya

+0

これは本当にありがとうございました。私はこの問題を解決し、多くのことを学びました。 :) –

+0

これは嬉しい= 9 – Yussef

関連する問題