2013-07-26 66 views
0

我是Java的新手,我處處尋找,但我沒有得到一個簡單的概念。Java變量在類內部不同的方法中不可用 - 新手

我聲明瞭兩個變量int。我希望這兩個變量對所有方法都是全局的。 在我的第一個方法中,我想從用戶輸入中獲取第一個變量的值。 然後,我想要新的值可用,識別,並由第二種方法調用。但是,每當第一個方法結束時,變量的值就會重新設置爲0,而第二個方法在第一個方法輸入中找不到用戶給它的值。我究竟做錯了什麼?我是否需要以不同的方式聲明我的變量?我需要以不同的方式聲明我的方法嗎?謝謝你的幫助!

import acm.program.*; 

public class FindRange extends ConsoleProgram { 

int num1; 
int num2; 

public void run() { 

    println("This program finds the largest and smallest numbers."); 

    getNum1(); 
    getNum2(); 
    // getNumUntilZero(); 
} 

public void getNum1() { 

    int num1 = readInt("?:"); 
    if (num1 == 0) { //do not accept 0 for first number 
     println("Please try again without 0."); 
     getNum1(); 
    } 

} 

public void getNum2() { 
    int num2 = readInt("?:"); 
    if (num2 == 0) { //if 2nd number is 0, print 1st num as high and low nums 
     println("Biggest number:" + num1); 
     println("Smallest number:" + num1); 

    } 
} 
} 
+0

你被重新聲明'num1'變量以及'num2'變量 –

回答

0

當你做int num1 = readInt("?:");方法getNum1()內,它的一個局部變量存儲在堆棧中。它不是指你要引用

全局變量(聲明爲實例變量),所以像這樣做:

public void getNum1() { 
    num1 = readInt("?:"); 
    if (num1 == 0) { // do not accept 0 for first number 
     println("Please try again without 0."); 
     getNum1(); 
    } 
} 

public void getNum2() { 
    num2 = readInt("?:"); 
    if (num2 == 0) { // if 2nd number is 0, print 1st num as high and low nums 
     println("Biggest number:" + num1); 
     println("Smallest number:" + num1); 
    } 
} 
+0

哇我只好刪除int num1 ...在我的方法吧?我想如果我再把int放在那裏,我重新聲明變量?謝謝! – JasonC

+0

是的。你是對的,當再次把int放在那裏時,你正在轉化當地變量 –

0

實際上創建了新的變量中的方法。所以實際上沒有分配值類變量,但方法變量: 所以更改

int num2 = readInt("?:"); 

num2 = readInt("?:"); 

int num1 = readInt("?:"); 

num1 = readInt("?:"); 
+0

哇這個網站令人難以置信,我幾乎立即收到來自多個人的相同迴應 - 謝謝!我現在知道了。 – JasonC

0

你redeclare al ocal變量稱爲相同的東西。這應該在「局部變量隱藏一個字段」的行中給出一個IDE警告。所以在該方法的範圍內有另一個numX

您需要引用實例變量,而不是聲明一個新變量:

public void getNumX() { 
    numX = readInt("?:"); 
    //... 
} 

你看,我已經刪除了int聲明,使現在這個並將值numX,而不是一個局部變量。

+0

哇這個網站是不可思議的,我幾乎立即收到了來自多個人的相同回覆 - 謝謝!我現在知道了。 – JasonC

相關問題