2011-12-04 53 views
1

我試圖重新回到Java--自從我學習基礎知識以來,大約已經過去了5年,並且自從.NET以來我一直在迷失。For Loop無法終止

我想在下面創建一個學生類,但是在程序運行時,整數讀入到數組中的for循環會卡住。

從我以前的知識和從研究中,循環似乎被正確構建,我似乎無法弄清楚它出錯的地方。

我確定這是愚蠢的 - 一如既往,但我想知道如果有人能指出我在正確的方向嗎? :)

import java.util.*; 
import acm.io.*; 

public class Student { 

    // instance variables 
    private int studNumber;  //Must be between (and including) 0 and 99999999. If input value invalid default to 0. 
    private String studName;  
    private int marks[]; 

    /* 
    * Constructor Student Class 
    */ 
    public Student(int studNumber, String StudName, int marks[]) { 

     // initialise instance variables 
     if (studNumber >=0 && studNumber<= 99999999) { 
      this.studNumber= studNumber; 
     } else { 
      this.studNumber = 0; //default value 
     } 

     this.studName= StudName; // no validation 
     this.marks = marks; 

     IOConsole console = new IOConsole(); 

     for (int i = 0; i <= 6; i++) { 
      marks[i] = console.readInt();   
     }  
    } 
} 
+2

什麼是'IOConsole'?當你嘗試調試這個程序時你看到了什麼? –

+0

@Peter,http://jtf.acm.org/javadoc/student/acm/io/IOConsole.html。 – aishwarya

+0

你實際上在程序卡住時提供了什麼值嗎? 'readInt'方法可能會從控制檯讀取某些內容,您是否看到此控制檯並輸入數據? – Matten

回答

1

我認爲,問題出在readInt()部分。在構造函數中讀取來自Console的輸入以便初始化屬性,將該任務委託給代碼的另一部分並將其移至構造函數之外是很常見的。

+0

嗨奧斯卡,我正在使用一個名爲BlueJ的編譯器,我會誠實地說,我以前不會使用(更多用於jGrasp)。要在此編譯器中創建學生對象,請將值輸入到BlueJs新對象對話框中。你認爲這有所作爲嗎? (道歉,如果這是一個愚蠢的問題) – 109221793

+1

我不認爲它有所作爲。問題在於,您在構造函數中調用了一個阻塞方法'readInt()',應該避免的 - 要知道'console.readInt()'期望用戶在控制檯中輸入一些值。相反,讓對象創建正常完成,然後在另一種方法中,詢問用戶初始化值並將它們傳遞給'marks'數組。 –

+0

我幫你。非常感謝:-) – 109221793

2

循環看起來是正確的。是否有可能在console.readInt()呼叫攔截,這使你在循環卡(該IOConsole類是不標準的JDK的一部分,我不熟悉)

2

問題是與console.readInt(),其中另一不停返回一個整數值循環執行或其他一些問題與方法

3

我認爲問題就出在這裏:

for (int i = 0; i <= 6; i++) 
{ 
    marks[i] = console.readInt();   
} 

在那裏我發現IOConsole參考是here,它似乎並沒有被什麼東西的唯一實例,該實例是標準Java框架的一部分。

如果你只是需要從控制檯掃描號碼,您可以使用Scanner類和使用方法nextInt()象下面這樣:

Scanner input = new Scanner(System.in); 
for (int i = 0; i <= 6; i++) 
    { 
     marks[i] = input.nextInt();   
    } 
+0

他使用的是這樣的:http://www-cs-faculty.stanford.edu/~eroberts/jtf/javadoc/student/acm/io/IOConsole.html – COD3BOY

+0

嗨npinti,我使用一個名爲BlueJ的編譯器我會說實話,我以前不會用過(更習慣jGrasp)。要在此編譯器中創建學生對象,請將值輸入到BlueJs新對象對話框中。你認爲這有所作爲嗎?(道歉,如果這是一個愚蠢的問題) – 109221793

+0

我不認爲它真的有所作爲。只是爲了清楚起見,blueJ是一個IDE,我從來沒有用過。我建議你切換到業界比較常見的Eclipse,或者使用Netbeans,它是Oracle(Sun的)推薦的IDE。 – npinti