你的程序有一個Java語法錯誤,爲此,編譯器會抱怨, 和一個更微妙的邏輯錯誤,這是相當常見即使在跨越整個C經驗 程序員/ C++/C#/ Java家族。
語法錯誤在於你使用的那種對於需要你指定的 冒號後的集合;或者,更確切地說,一個類型的對象,其 實現接口可迭代。接口定義了合同,它授權編譯器對實現接口的類的實例執行某些操作。因此,編譯器將處理過的迭代變量只有在 變量可迭代。由於你的情況卷類型爲INT(因此 甚至不是一類)和INT不的Iterable,你的錯誤。
上使用
經典
爲,它支持幾乎與 在C,C++,C#和Java沒有區別整數
您迭代。
for (int num1 = 0; num1 < rolls; num1 = num1 + 1)
/* A single statement (body) */;
這意味着聲明:重複體,即的(...)後提到單說法,正是卷倍。更準確地說,它實現了以下算法:
A. Initialize num1 to 0
B. Is num1 lesser than rolls?
If yes, execute the body, increment num1 and go back to B
If not, go to the first instruction after the **for**
現在,第二個問題;這可能與爲的口味都發生,但它是不可能被忽視與可迭代味道。你很可能不希望之後的聲明中有分號;這是爲什麼。對於C語言和類C語言的所有語言(如Java)的設計決策是,在大多數要插入一個或多個語句的地方,實際上只能插入一條語句。該爲循環可以在它的身上只能處理一條指令,並且這將是)一前一後,不顧縮進和編碼風格。考慮以下對循環:
// Prints numbers from 0 to 9
int x = 0;
for (x = 0; x < 10; x = x + 1)
System.out.println(x);
// Prints 10
int y = 0;
for (y = 0; y < 10; y = y + 1);
System.out.println(y);
他們看起來一樣,但第一代碼片段的效果是從0打印至9的數字,而第二個效果是印刷10的原因是第二個主體實際上是一個空的陳述。你可以重寫兩個* 爲 * S這樣的:
int x = 0;
for (x = 0; x < 10; x = x + 1)
System.out.println(x);
int y = 0;
for (y = 0; y < 10; y = y + 1)
/* Lalala... does nothing at all... */;
System.out.println(y); // When control flow gets here, y equals 10
要放多語句內爲,則必須使用塊,這是一個許多語句組成的語句。對於初學者來說有什麼誤導的是,塊不需要與關聯,並且實際上可以自己存在。在Java中,下面的代碼是合法的:
{
num = generator.nextInt(sides);
System.out.println("You rolled a " + num);
}
當你把一個爲其中錯誤地包括在最後的分號:
for (int num1 = 0; num1 < rolls; num1 = num1 + 1);
{
num = generator.nextInt(sides);
System.out.println("You rolled a " + num);
}
你基本上是說:
for (int num1 = 0; num1 < rolls; num1 = num1 + 1)
/* Lalala... does nothing at all... */;
{
num = generator.nextInt(sides);
System.out.println("You rolled a " + num);
}
因此,你的執行沒有什麼正好卷次,然後它執行一次塊語句。有時候,這些錯誤是由事實緩和,一個爲的身體會引用迭代變量,NUM1,但它不是你的情況。考慮:
for (int num1 = 0; num1 < rolls; num1 = num1 + 1);
{
Console.out.println("Roll No. " + num1);
num = generator.nextInt(sides);
System.out.println("You rolled a " + num);
}
這有;問題,但編譯器檢測到有問題,因爲您在塊語句中使用num1,但由於;塊語句未與爲相關聯,並且因此NUM1超出範圍。以下,雖然具有相同的邏輯錯誤,不會導致一個編譯器錯誤:
for (int num1 = 0; num1 < rolls; num1 = num1 + 1);
{
num = generator.nextInt(sides);
System.out.println("You rolled a " + num);
}
注意:也是你而有額外的類似的問題;字符。
在'for'循環聲明中'''後面取掉''''。 –
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html – chrylis
此外,你不讀任何東西到'sides'你'while'循環之前。 – chrylis