2013-02-22 54 views
-1

(对于初学者Java类) 该任务指定我只生成一个Scanner实例,并且我需要它在多个方法中,所以我声明它在main之外。我声明一个数组并尝试将它与方法调用initialCash()相等,就像我在Python中所做的那样。问题是如果我使initialCash方法静态,我不能使用Scanner。如果initialCash()不是静态的,那么Eclipse足以告诉我它“不能对非静态方法进行静态引用”。 (在money = initialCash(); line) 我该如何解决这个问题?初学者Java静态范围错误

package proj1; 

import java.util.Scanner; 

public class Project1 
{ 
    Scanner scanner = new Scanner(System.in); 

    public static void main(String[] args) 
    { 
     int[] money = new int[4]; 
     money = initialCash(); 

    } 
    public int[] initialCash() 
    { 
     int[] initialMoney = new int[4]; 

     while(true) 
     { 
      System.out.print("Ones: "); 
      initialMoney[0] = scanner.nextInt(); 
      System.out.print("Fives: "); 
      initialMoney[1] = scanner.nextInt(); 
      System.out.print("Tens: "); 
      initialMoney[2] = scanner.nextInt(); 
      System.out.print("Twenties: "); 
      initialMoney[3] = scanner.nextInt(); 

      if((initialMoney[0]>=0)&&(initialMoney[1]>=0)&&(initialMoney[2]>=0)&&(initialMoney[3]>0))  
      { 
       return initialMoney; 
      } 
      else 
      { 
       System.out.println("One or more invalid denominations. Try again."); 
      } 
     } 

    } 


} 

回答

3

创建你的类的一个实例,并从main调用该实例的initialCash。

money = new Project1().initialCash(); 
+2

+1 ...如果我还有选票。 – 2013-02-22 20:56:23

+0

@BrianRoach没有problomo。我的每日200个代表已经超过了。真的没关系.. hehe ..谢谢你.. :) – PermGenError 2013-02-22 20:58:32

+0

非常感谢,我显然还是习惯了整个面向对象的东西 – user1880866 2013-02-22 21:07:56

0

PermGenError说的话肯定会工作,或者你可以使双方的initalCash()方法和扫描仪参考静态变量。

0

在你的代码中,行

Scanner scanner = new Scanner(System.in);

创建每次创建Project1类型的对象时,一个新的Scanner对象。然而,如果你写了它作为

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

这将通过引用此对象的所有类创建使用单一Scanner实例。在你提到的问题中,必须有一个扫描仪对象,如果是这样的话。

如果使用

money = new Project1().initialCash();

要创建一个新的Project1对象以及一个新的Scanner对象,如果你是通过调用另一个函数,你不能因为它是依赖于重用Scanner对象那Project1的具体实例,所以我建议你把它做成static,与initialCash函数一样,它绑定到那个对象实例上。