2012-03-14 19 views
2

我來自程序編程背景,需要一些幫助來掌握方法來回傳遞變量的方式。這些方法使用明確聲明的值,但是當我嘗試將值從一種方法傳遞給另一種時,我得到各種「錯誤:無法找到符號」消息。我無法掌握如何將變量傳入或傳出方法

我懷疑我是a)。在錯誤的地方聲明變量,並在方法結束時將其清除,或b。)如何編寫變量的發送/返回是錯誤的,或者c。)兩者。更重要的是,雖然我閱讀了我的教科書和一些在線教程資源,但仍然無法理解語法應該如何工作。有人能告訴我嗎?程序:在提供的代碼中,我試圖擲出五個六面骰子。一種方法是滾動單個模具,另一種方法多次調用該方法並將值寫入數組...我想。

由於提前, d

public class FiveDice 
{ 
// MAIN METHOD 
    public static void main(String[] args) 
    { 
// SET VARIABLES FOR DIE HIGH AND LOW VALUES, NUMBER OF DICE TO ROLL 
     final int LOWEST_DIE_VALUE = 1; 
     final int HIGHEST_DIE_VALUE = 6; 
     final int DICE_TO_ROLL = 5; 
// ROLL A SINGLE DIE VIA METHOD rollADie() 
      int roll = rollADie(HIGHEST_DIE_VALUE,LOWEST_DIE_VALUE); 
     System.out.println("roll " + roll); 
    } 
// 
// RETURNS THE RESULT OF A SINGLE DIE ROLL 
    public static int rollADie(int HIGHEST_DIE_VALUE,int LOWEST_DIE_VALUE) 
    { 
     int roll; 
     roll = ((int)(Math.random()*100)%HIGHEST_DIE_VALUE+LOWEST_DIE_VALUE); 
     return roll; 
    } 
// 
// CALL rollADie TO ROLL DICE_TO_ROLL (above) DICE; RETURN ARRAY OF ROLLED DICE 
    public static int[] rollTheDice(int DICE_TO_ROLL, int HIGHEST_DIE_VALUE,int LOWEST_DIE_VALUE) 
    { 
      int rollNum; 
     int rolledDie; 
       for(rollNum=1;rollNum<=DICE_TO_ROLL;rollNum++) 
       { 
     int[] rolledDie = new rollADie(HIGHEST_DIE_VALUE,LOWEST_DIE_VALUE) 
     { 
      rolledDie 
     }; 
     return rolledDie[]; 
      } 
     } 

    } 
+0

你能用兩句話問你的問題嗎?我肯定有人會讀它。 – pvoosten 2012-03-14 19:26:50

+3

你有一個簡單而具體的問題嗎? – 2012-03-14 19:27:36

+0

這裏的代碼實際上只是程序性的 - 你認爲你有什麼不同? – Mark 2012-03-14 19:33:22

回答

1

我說實話,這是一團糟(但我們都是新的一次,對吧)?你真正需要做的只是閱讀編寫Java應用程序的教程,特別是面向對象的概念,並隨時學習。基本的面向對象的概念,即方法代表了它們所連接的對象的動作/能力,而不是大多數獨立函數/子例程的列表,這將真正幫助你看到OO編程與函數編程有什麼不同。

我會一節一節去嘗試在這裏幫助你。

第1部分:

// MAIN METHOD 
public static void main(String[] args) 
{ 
    // SET VARIABLES FOR DIE HIGH AND LOW VALUES, NUMBER OF DICE TO ROLL 
    final int LOWEST_DIE_VALUE = 1; 
    final int HIGHEST_DIE_VALUE = 6; 
    final int DICE_TO_ROLL = 5; 

    // ROLL A SINGLE DIE VIA METHOD rollADie() 
    int roll = rollADie(HIGHEST_DIE_VALUE,LOWEST_DIE_VALUE); 
    System.out.println("roll " + roll); 
} 

好了,你已經有了一個主要方法。好的開始。所有的Java應用都需要這個。但是:

  • 你的主要方法,這是不是真的有必要聲明的最終變量。在這裏刪除關鍵詞final,將變量名重新大寫爲camelCase約定,並將它們作爲正常變量傳遞。
  • 此外,這只是一個風格點,你聲明lowestDieValue其次是highestDieValue,這是完全合理的,但是,然後你通過他們在最高的第一,然後最低。這感覺有點奇怪和不一致,所以我翻轉了他們。
  • 最後,沒有理由在全部大寫中做你的評論,所以作爲另一個風格點,我只會使用普通大小寫。然而,在你的代碼中,我認爲你的變量和方法名稱是足夠描述性的;你根本不需要評論,所以我把它們帶出去了。

所以第1節,這些更改後,應該是這個樣子:

public static void main(String[] args) { 
    int lowestDieValue = 1; 
    int highestDieValue = 6; 
    int diceToRoll = 5; 

    int roll = rollADie(lowestDieValue, highestDieValue); 
    System.out.println("roll " + roll); 
} 

第2部分:

  • 重新排序的變量名如上所述,和唐」使用全部大寫 - 按照慣例所有大寫都爲常量保留(即final變量)。當你將它傳遞給一個方法時,它們不是總決賽/常量。
  • 此方法過於冗長。它只是一個有用的東西,所以它可以寫在一行中。

當你做這些改變,第2節應該是這樣的:

public static int rollADie(int lowestDieValue, int highestDieValue) { 
    return ((int)(Math.random()*100)%highestDieValue+lowestDieValue); 
} 

第3部分:

這種方法可以大大簡化。我們基本上要完成的三兩件事:

  1. 創建一個用於存儲軋製模通過擲骰子值
  2. 循環得到的值的數組,數組
  3. 返回存儲每個創造價值所產生的int[](整型數組)

你必須在這個方法中的幾個問題,包括呼籲在for循環的中間return聲明(這是編譯的,但在技術上你不正確r的情況,因爲它會導致你的方法只返回數組中的一個值)。

我只是要完全重寫這種方法,包括根據上述慣例對變量名進行重命名/重新大寫。重寫乾淨完成的三兩件事這種方法需要做的(如上所述):

public static int[] rollTheDice(int numDiceToRoll, int lowestDieValue, int highestDieValue) { 
    int[] allDiceRolls = new int[numDiceToRoll]; 

    for(int i = 0; i < allDiceRolls.length; i++) { 
    allDiceRolls[i] = rollADie(lowestDieValue, highestDieValue); 
    } 

    return allDiceRolls; 
} 

最後:

  • 風格:它一直是我的習慣,把開放{在年底一條線,而不是自己的線,但這只是一種風格的東西。樣式是有效的,並且在編譯時意味着相同的東西。
  • 代碼:您的課程名爲「FiveDice」,但您實際上不會在您的主要方法中滾動5個骰子,也不會調用rollTheDice方法。
+0

因爲我正在進行幾個修訂。我認爲現在完全一致和正確。祝你好運! – jefflunt 2012-03-14 20:06:59

+0

在第3部分中,for(int i = 0; i dwwilson66 2012-03-15 02:51:37

+0

當在一個數組上使用時,'length'返回一個整數,表示數組中的「slots」的數量。所以,如果你聲明'int [] array = int [5];'那麼'array.length'將返回整數值'5' – jefflunt 2012-03-15 13:05:46

0

函數返回類型,這是他們返回的內容。 他們只能有一個回報。一旦函數返回其執行結束。

public int foo()
{
return 1;
}

公衆詮釋欄()
{
返回1;
//到這裏無代碼將執行
}

要設置的值,說int類型的敏:

INT明特= FOO(); //沒有理由返回這裏。如果一個函數有一個返回值,它將不管返回它。

+0

所以,如果我正確地讀你,int myInt = foo();實際上是抓取從public int foo()返回的1 ...?是對發生了什麼事的準確理解? – dwwilson66 2012-03-14 19:51:27

+0

@ dwwilson66這是正確的。 – wachpwnski 2012-03-14 22:22:53

0

您是否嘗試過Java的例如讀了尋找一些可用的教程:

http://docs.oracle.com/javase/tutorial/java/index.html

+0

我有。具體來說,我已經廣泛地研究了類和對象部分......並且它沒有意義。這幾乎就像提到多邊形和對這些例子的興趣使我的大腦關閉...... – dwwilson66 2012-03-14 19:41:52

1
int newVariable = return methodFromWhichDataIsReturned(fieldReturnedFromMethod); 

關鍵字return不能放在那裏。它表明您希望退出當前正在執行的方法,因此它只能放在行的開頭,例如return 3;當您調用返回值的方法時,不需要在前面放置return。換句話說,它應該是:

int newVariable = return methodFromWhichDataIsReturned(fieldReturnedFromMethod); 

方法rollTheDice應當更可能被寫爲:

int rollNum; 
int[] rolledDie = new int[DICE_TO_ROLL]; 
for (rollNum = 1; rollNum <= DICE_TO_ROLL; rollNum++) { 
    rolledDie[rollNum - 1] = rollADie(HIGHEST_DIE_VALUE, LOWEST_DIE_VALUE); 
} 
return rolledDie; 

在上面的第二行,我們正在創建與DICE_TO_ROll數量的元素的新的數組。這個數組有整數,每個整數默認爲0。我們現在要擲骰子,每次rollADie計算出一個值,我們將它存儲在rollADie的位置rollNum - 1(因爲數組從0開始,因此第一個元素位於rolledDie[0])。在最後一行中,我們從這個方法返回數組。

最後,在各種語言是寫常量在首都的名稱和常規變量,否則名稱的約定。例如,下面一行:

public static int rollADie(int HIGHEST_DIE_VALUE,int LOWEST_DIE_VALUE) 

將通常被寫爲:

public static int rollADie(int highestDieValue, int lowestDieValue) 

或:

public static int rollADie(int highest_die_value, int lowest_die_value) 
1

This是開始學習的好地方如何Java類和方法來自另一種語言。具體而言似乎有些面向對象的概念,躲避你在這種情況下,我建議你閱讀these

看着你的代碼中調用rollADie正確位置:

int roll = rollADie(HIGHEST_DIE_VALUE,LOWEST_DIE_VALUE);

但是到這裏嘗試實例化它像一類是行不通的:

for(rollNum=1;rollNum<=DICE_TO_ROLL;rollNum++) 
{ 
    int[] rolledDie = new rollADie(HIGHEST_DIE_VALUE,LOWEST_DIE_VALUE) 
    { 
     rolledDie 
    }; 
    return rolledDie[]; 
} 

嘗試更換此第二與此塊:

int[] rolledDiceValues; 
for(rollNum=1;rollNum<=DICE_TO_ROLL;rollNum++) 
{ 
    rolledDiceValues[rollNum] = rollADie(HIGHEST_DIE_VALUE,LOWEST_DIE_VALUE); 
} 
return rolledDiceValues; 

Y OU必須等待for循環來完成迭代,然後才能返回充滿骰子滾動完成的陣列。

+0

感謝負載。這有助於。當我看到它時,我可以說出它爲什麼有意義,以及我在哪裏搞亂了。問題是,我理解面向對象的概念思想,但將其翻譯爲工作代碼......這完全是另一回事。 :)我會重新訪問javadoc並播放更多內容。 – dwwilson66 2012-03-14 19:47:20

1

我不能看你的代碼,因爲它不完全是一個特定的代碼片段......它需要時間來閱讀和編織。

我會嘗試解決您的主要擔憂 - 傳遞變量。我一直認爲的編程功能的數學函數,在這個意義上,無論值I傳遞給方法被使用。

作爲一個例子:我有一個方法f(x)= 2x -3x + 7。 X顯然綁定到此功能的範圍。

如果我有一個可變Ŷ = 17,和我打電話給我的方法與X = ÿ,則值17用來代替x的的F內部(x)的。


對於Java,它沒有太大的不同。你傳遞一個值(與類型的API中描述或自行指定),然後期望的結果(或無效,如果返回類型爲void)。舉一個例子,從你的代碼...

public static int rollADie(int HIGHEST_DIE_VALUE,int LOWEST_DIE_VALUE) 
    { 
     int roll; 
     roll = ((int)(Math.random()*100)%HIGHEST_DIE_VALUE+LOWEST_DIE_VALUE); 
     return roll; 
    } 

...如果我要調用此方法具有兩個int變量var1=15var2=17它是這樣的。

int myRoll = rollADie(var1, var2); 

當我們通過變量函數,我們要做的是接受,我們正在使用簽名中的變量(在這個例子中,HIGHEST_DIE_VALUELOWEST_DIE_VALUE)綁定具體到rollADie的範圍 。這意味着這兩個變量有沒有意義以外的方法,保存爲它們的類型。

+0

是啊......功能總是在學校裏鞭打我的**。 :)但我明白你的意思。這有助於很好地構建它。謝謝! – dwwilson66 2012-03-14 23:59:01