2013-02-22 61 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函數一樣,它綁定到那個對象實例上。