我试图从一个不同的类调用一个变量,所以我可以更新变量

时间:2017-03-28 22:15:17

标签: java oop

我没有在这里问过很多问题,如果我错误地提出了这个问题,那就很抱歉。

我试图在主类中调用变量AmountOfTickets。所以我可以用while循环的每个循环来更新它。我不知道如何在没有eclipse显示错误的情况下正确调用变量。

这是我创建变量AmountOfTickets的类 我正在尝试更新

template <typename T>
constexpr auto doSomeSum(const T* a, const T* b) {
    if (a > b)return T{0};
    auto sum = T{0};
    while (a != b)
        sum += *(a++);
    return sum;
}

这是我尝试调用变量并使用它的主程序代码

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;
    }
}

谢谢。

1 个答案:

答案 0 :(得分:0)

首先,你的名为AmountOfTickets的var是静态的,它意味着一个副本将存在于所有对象中,也就是你的方法getAmountOfTickets。

你这里有问题

            AmountOfTickets = get.AmountOfTickets - 1

您必须使用ClassName.YourVar调用变量,如下所示:

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

也是你的方法。

你也可以导入这样的静态:

     import java.util.Scanner;

    import static huh.TicketHandler.*;

所以你可以使用:

            AmountOfTickets = getAmountOfTickets() - 1;

&#34;您可以考虑创建一个对象并像这样调用var&#34;

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;
    }

但由于这是静态的,它会将objectOne替换为

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

所以,我认为你可以使用导入静态(因此你可以避免在静态之前编写相同的类名),或者先将类的名称放在名称和方法之后。

使用导入静态可能会很糟糕,如果有另一个具有与您相同的名称或方法的类并导入,因为编译器可以说,嘿,我想使用哪一个?

所以,我宁愿使用fullnameClass.varOrMethod

希望有所帮助

btw使用这个:TicketHandler.AmountOfTickets和这个:TicketHandler.getAmountOfTickets()可以在我说的所有ApplicationProgra的类代码中使用,因为它是静态的,因为你把它们公开了

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

        return AmountOfTickets;
    }

=)我猜这就是你要求的。 C-亚