2016-09-30 43 views
-2

sc.nextInt();給sc提供了錯誤。我只是試圖通過分配函數和調用它們來計算x和y的總和。這只是一項任務,我必須完成,但不幸的是我問過我的助教,但他不知道如何解決。帶整數輸入的掃描器錯誤

import java.util.Scanner; 
public class calculator { 

int x; 
int y; 

public void setnumber(){ 
    System.out.println("Please Enter X"); 
    x = sc.nextInt(); 
    System.out.println("Please Enter Y"); 
    y = sc.nextInt(); 
} 

public void sum(){ 
    int sum = x + y; 
    System.out.println ("The Sum" + sum); 
} 

public static void main(String[] args) { 

    Scanner sc = new Scanner (System.in); 
    calculator sx = new calculator(); 
    sx.setnumber(); 
    sx.sum(); 
} 
} 
+1

你會得到什麼錯誤? – Pshemo

+0

您需要將掃描儀對象的參考號傳遞給設置的號碼方法.'public void setnumber(Scanner sc)' –

+7

「我問了我的助教,但他不知道如何解決這個問題。 –

回答

2

移動掃描器聲明的setnumber方法:

import java.util.Scanner; 
public class calculator { 

int x; 
int y; 

public void setnumber(){ 
    Scanner sc = new Scanner (System.in); 
    System.out.println("Please Enter X"); 
    x = sc.nextInt(); 
    System.out.println("Please Enter Y"); 
    y = sc.nextInt(); 
} 

public void sum(){ 
    int sum = x + y; 
    System.out.println ("The Sum" + sum); 
} 

public static void main(String[] args) { 

    calculator sx = new calculator(); 
    sx.setnumber(); 
    sx.sum(); 
} 
} 
+0

謝謝,這確實解決了它。你介意解釋它爲什麼修復它? –

+0

它修復了它,因爲Scanner對象的可見性僅限於聲明它的方法。在您的代碼中,Scanner對象在主方法中是「隱藏的」。我將它移到了引用它的方法中。 – nicomp

+0

打開掃描程序處理System.in方法可能會導致幾個問題。由於我們應該確保關閉資源,這意味着我們應該在某個時候關閉Scanner,這也意味着關閉System.in。如果我們只想使用這個方法一次,而不再從System.in中讀取,那麼可以,但是如果情況並非如此,那麼最好爲System.in創建一個單獨的掃描器並將其作爲參數傳遞給方法。然後,我們可以簡單地在主要方法結束時關閉此掃描器,就在退出之前。 – Pshemo

0

採取掃描儀SC出來的主要方法,在類級別定義它。

+1

範圍應該是有限的。如果該對象僅用於一種方法,則應在該方法中聲明該對象。 – nicomp

0

您應該瞭解範圍。 掃描儀對象在主要方法外部不可見