变量不会增加,从静态方法调用非静态方法

时间:2014-10-08 04:23:42

标签: java variables static non-static

我正在为一个学校项目创建一个自动售货机模拟,我一直无法克服这些前几个障碍。该项目的一个要求是有5个全局变量,我假设这意味着在任何方法之外但在类中定义的变量。起初,在我了解“静态”和“对象”之前,我无法调用它们,我通过创建调用这些变量的实例方法解决了这个问题,并创建了这些实例方法的对象。我的主要静态方法。但问题是,我需要增加这些变量,它们不会从0变化!我试图让用户“插入硬币”进入机器但是当我尝试时没有任何反应。无论如何,这里是代码,它不是接近完成但是对我正在做错的一点帮助和澄清将非常感激。谢谢!

package project3;

import java.util.Scanner;

public class Project3 {
       double nickels = 0.00;
       double quarters = 0.00;
       double dimes = 0.00;
       double dollars = 0.00;
       double credits = nickels + quarters + dimes + dollars;
public static void main(String[] args) {
    Project3 menu = new Project3();
    menu.menu();
}
public void menu () {
        int counter = 0;
        Scanner input = new Scanner(System.in);
    while (counter >=0 && counter <=4){
        System.out.print("Credit: "+credits +"\n0. Insert Money \n1. Twix: 50¢ \n2. Marathon Bar: $1.00 \n3. Snickers: 75¢ \n4. Return Change \nSelection: ");
        counter = input.nextInt();
        switch (counter) {
            case 0: getMoney();
                break;
            case 1: 
                break;
            case 2: 
                break;
            case 3: 
                break;
            case 4: 
                break;               
        }
    }
}
public void getMoney(){ 
    int counter = 0;
    Scanner input = new Scanner(System.in);
    while (counter >=0 && counter <=4){            
        System.out.print("Credit : " +credits+"\n1. Insert Nickel \n2. Insert Dime \n3. Insert Quarter \n4. Insert Dollar \n5. Return to menu \nSelection: ");
        counter = input.nextInt();
        switch (counter) {
            case 1: nickels += .05;
                break;
            case 2: dimes += .10;
                break;
            case 3: quarters += .25;
                break;
            case 4: dollars += 1.00;      
                break;                    
      }  
    }
  }   
}

1 个答案:

答案 0 :(得分:4)

您正在使用当前存储在nickles,quarters等中的值初始化信用

每次请求值时都不会更新

您需要做的是添加一个函数:

private double getCredits(){
    return nickels + quarters + dimes + dollars;
}

并打印getCredits()而不是信用