台灣最大程式設計社群網站
線上人數
514
 
會員總數:245973
討論主題:189551
歡迎您免費加入會員
討論區列表 >> Java >> 初階學習者的小問題(StudentPoll程式碼不甚了解其用意)
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
初階學習者的小問題(StudentPoll程式碼不甚了解其用意)
價值 : 10 QP  點閱數:1089 回應數:3
樓主

哈哈哥
門外漢
0 3
64 2
發送站內信

各位前輩們大家好,小弟自學java程式語言中,最近接觸到一段程式碼是屬於一維陣列應用,但是我不太懂他for loop裡面的運作,反覆看了幾次還是沒有頭緒
所以上網來尋求解答!! 我會把我知道的標記在上面,但是不清楚的地方,麻煩請高手前輩們指點指點@@ 此程式名稱為StudentPoll或許很多前輩們都有看過!
// StudentPoll.java
// Student poll program
import javax.swing.*;

public class StudentPoll {
public static void main( String args[] )
{
//宣告responses[40]陣列填入數值,屬於int資料型態
int responses[] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10,
1, 6, 3, 8, 6, 10, 3, 8, 2, 7,
6, 5, 7, 6, 8, 6, 7, 5, 6, 6,
5, 6, 7, 5, 6, 4, 8, 6, 8, 10 };
//宣告frequency[11]的陣列,屬於int資料型態
int frequency[] = new int[ 11 ];
//宣告空字串output
String output = "";
//以下for 我只是他宣告整數answer 0;執行次數為10次:每做一次answer+1
//但是這行 ++frequency[ responses[ answer ] ] 完全看不懂他在運作什麼
for ( int answer = 0;answer < responses.length;answer++ ) // increment
++frequency[ responses[ answer ] ];
//下面這行不甚了解其用意,大概意思是把output字串填入"Rating\tFrequency\n"這樣嗎?
output += "Rating\tFrequency\n";
//同上for loop = =完全看不懂.....
for ( int rating = 1;rating < frequency.length;rating++ )
output += rating + "\t" + frequency[ rating ] + "\n";
//下面兩行也是完全看不懂用法..
JTextArea outputArea = new JTextArea( 11, 10 );
outputArea.setText( output );
//下面這個使用方法我懂,但是我因為前面有兩個for loop看不太懂在執行什麼,所以我不太了解
//為什麼outputArea,怎麼突然變成一個表了@@??
JOptionPane.showMessageDialog( null, outputArea,
"Student Poll Program",
JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 );
}

耽誤板上各位前輩的時間不好意思。

本篇文章發表於2014-02-19 13:17
1樓
回應

香帥
檢舉此回應
output += "Rating\tFrequency\n";
代表output字串 = 空字串(output的起始值) + "Rating" + tab字元 + "Frequency" + 換行字元
for ( int answer = 0;answer < responses.length;answer++ ) // increment
代表responses陣列的所有資料,從0到最後
++frequency[ responses[ answer ] ];
代表1-10出現數字的頻率累加在frequency陣列
其他的請參考執行結果1-10出現的頻率數字show出來如下圖去google語法去了解
本篇文章回覆於2014-02-19 19:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

香帥
檢舉此回應
補圖
本篇文章回覆於2014-02-19 19:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Raymond
檢舉此回應
>但是這行 ++frequency[ responses[ answer ] ] 完全看不懂他在運作什麼

取 responses[answer] 的值, 把它當作 frequency 的引數, 然後把相關的元素增一. 自己用紙筆來跑看看就知道了:
一開始, frequency[0]~frequency[10] 都是 0.
loop 開始跑, answer 是 0;
- responses[0] 的內容是 1;
- ++frequency[1] 就是把 frequency[1] 的內容增一, 所以 frequency[1] 等於 1.

下一個 loop, answer 變成 1:
- responses[1] 的內容是 2;
- ++frequency[2] ==> frequency[2] 變成 1

把上面的執行用圖來表示:
[code]
answer responses[answer] ++frequency[]
-----------------------------------------------------------------------------
0 1 frequency[1] = 1 (responses 的 '1' 出現了 1 次)
1 2 frequency[2] = 1 (responses 的 '2' 出現了 1 次)
2 6 frequency[6] = 1 (responses 的 '6' 出現了 1 次)
3 4 frequency[4] = 1 (responses 的 '4' 出現了 1 次)
4 8 frequency[8] = 1 (responses 的 '8' 出現了 1 次)
:
10 1 frequency[1] = 2 (responses 的 '1' 出現了 2 次)
11 6 frequency[6] = 2 (responses 的 '6' 出現了 2 次)
12 3 frequency[3] = 1 (responses 的 '3' 出現了 1 次)
:
[/code]

這是很典型的用來計算 responses 裡的資料出現多少次的方法, 也就是說, 1 出現幾次, 2 出現幾次, 等等....
用這個方法的前提是: responses 裡的資料的範圍不能太大. 從你的程式看, response[] 內容的範圍是 1~10.

>下面這行不甚了解其用意,大概意思是把output字串填入"Rating\tFrequency\n"這樣嗎?
>output += "Rating\tFrequency\n";

沒有「填入」. 它的意思是:


output 會變一個新的字串, 新字串的內容是以 output 原有的內容加上 "Rating\tFrequency\n".
output 原來的內容是空字串 (""), 新的內容是 "Rating\tFrequency\n";

在 java 語言裡, X += Y 的意思是 X = X + Y. 而 '+' 用在字串上是 string concatenation, 把字串連接起來, 變成一個新的字串.

>同上for loop = =完全看不懂.....
>for ( int rating = 1;rating < frequency.length;rating++ )
>output += rating + "\t" + frequency[ rating ] + "\n";

+= 上面解釋過了. 後面的式子的 + 混合了整數及字串. 如果 '+' 的其中一個運算元是字串, java 會先把另一個運算元變成字串, 然後再做字串的連結. 所以

會變成


在上面的 loop 裡, 每一次 loop, output 都會變長, 原有的短字串會不見, 變成長的字串. 比方說:



本篇文章回覆於2014-02-19 21:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.