2015-06-02 35 views
2

我正在製作一個分析一組學生分數的程序。用戶應該能夠輸入一個等級(例如,92,80或50),並且他們應該出現在他們按下添加按鈕時提供的textArea中。我使用整數的ArrayList將所有這些標記添加爲元素,並按升序正確顯示它們。當我嘗試這樣做時,輸出會顯示我輸入的號碼,並在添加新號碼後替換此號碼。如果我嘗試添加更小的數字,它只會保留數字。我覺得我的邏輯完全錯了。這裏是我到目前爲止的代碼:如何在元素被添加時輸出ArrayList的元素?

private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {           
    Integer grade; 
    grade = Integer.parseInt(markInput.getText()); //I convert the String to Integer to be able to add it to the ArrayList 
    if (grade >=0 & grade <=100){ 
     marksListing(); //This calls the method that actually displays the items in the ArrayList 
    } 
    else { 
    errorLabel.setText("Invalid grade. Please enter a number between 0 and 100."); 
    } 
}           
private void marksListing() { 
    Integer grade; 
    grade = Integer.parseInt(markInput.getText()); 
    marks.add(grade); 
    Collections.sort(marks); 
for (Integer mark : marks) { 
    markBox.setText(String.valueOf(mark)); 
} 

我研究了很長時間,找不到如何解決這個問題。任何幫助表示讚賞。謝謝。

回答

1

我假設你想要列出的數字,每行一個?如果是這樣,你只需要建立一個大的字符串,數字用逗號分隔,然後把它放到你的文本字段中。見StringBuilder

所以這裏的一些僞代碼:

StringBuilder sb = new StringBuilder() 
for(...){ 
    sb.append(mark).append("\n") 
} 
markBox.setText(sb.toString()) 
+0

這是工作在它取代之前的輸出,但現在它增加了數字旁邊另一個像這樣:627080.我怎麼得到他們所有在不同的線?我知道你提到用逗號分開它們,但你是什麼意思? – Nats

+0

嗯,我希望你能夠自己找出那部分:)我已經在上面添加了這個細節。 – GreenGiant

+0

哦!我懂了。我從來沒有使用過StringBuilder,絕對是一個方便的工具。謝謝! :) – Nats

1

問題出在最後for循環:setText設置了markBox的完整文本,即每次覆蓋最後一個值。您需要將新的標誌目前添加到文本框中,例如

markBox.setText(markBox.getText() + String.valueOf(mark)); 

在這兩者之間,你可能要一個分離器添加到您的喜好。在for循環之外,應該在添加標記之前將文本初始化爲空字符串。

+0

這個工作,但這些數字需要留在排序順序不考慮。 – GreenGiant

+0

我添加了'markBox.setText(markBox.getText()+ String.valueOf(mark)+「\ n」);'但現在,它重複它並將其添加到之前輸出框中的內容。例如:** 70 **,62,** 70 **,50,62,** 70 **。它不會替換之前的輸出,而是創建一個模式。 – Nats

+0

@GreenGiant:我看到'for'循環中的行,其中標記已經按照排序順序給出。我添加了一個關於初始化盒子的句子。 – niceguy