2013-11-02 122 views
0
import java.awt.*; 
import java.awt.geom.Line2D; 
import java.awt.geom.Point2D; 
import java.awt.geom.Rectangle2D; 
import java.applet.Applet; 
import java.util.Scanner; 

public class Histogram extends Applet{ 
static int [] scores= {13,30,23,8}; 
static int [] minInterval = {0,25,50,75}; 
static int [] maxInterval = {25,50,75,100}; 
public void paint (Graphics g){ 
    int max = 0; 
    for (int i = 0; i < scores.length; i++) { 
     if (max < scores[i]) { 
      max = scores[i]; 
     } 
    } 

    Graphics2D g2 = (Graphics2D)g; 
    Point2D.Double Yi = new Point2D.Double(50,50); 
    Point2D.Double Yf = new Point2D.Double(50,30*scores.length); 
    Line2D.Double Y = new Line2D.Double (Yi,Yf); 
    Point2D.Double Xi = new Point2D.Double(50,50); 
    Point2D.Double Xf = new Point2D.Double(50+(8*max),50); 
    Line2D.Double X = new Line2D.Double (Xi,Xf); 
    int x = 8*max; 
    //Draw the "Score" 
    int headerX = 50+(x/(max/5))*((max/5)-1); 
    g2.drawString("Histogram of Student Scores",(headerX),30); 
    for(int i=0;i<=max/5;i++){ 
     int j = (i)*5; 
     if(i<max/5) 
      g2.drawString(String.format("%d",j),50+(x/(max/5))*i,50); 
     else 
      g2.drawString(String.format("Number of Students"),50+(x/(max/5))*i,50); 

    } 
    for(int i=0;i<=maxInterval.length;i++){ 
     if(i != maxInterval.length-1) 
      g2.drawString(String.format("[%d,%d)",minInterval,maxInterval),20,60+(30)*i); 
     else if(i == maxInterval.length-1) 
      g2.drawString(String.format("[%d,%d]",minInterval,maxInterval),20,60+(30)*i); 
     else 
      g2.drawString("Score Ranges",20,60+(30)*i); 
    } 
    g2.draw(X); 
    g2.draw(Y); 
} 

} 

我的問題是代碼當我測試在另一我的代碼不會在循環執行的代碼塊

方法中的循環不進入第三loop.but。它有點工作,所以我不知道接下來要做什麼。我想知道它爲什麼不是

執行該代碼塊。

提前致謝。

+0

你怎麼知道它不執行第二個循環? – vandale

+2

我會使用一個調試器 - 將一些中斷點加入並看看發生了什麼。這比在這裏要求更快,除非你有一個SSCCE。 –

+0

你可以在該行確認max> 0嗎? –

回答

0

您提供了一個數組作爲參數傳遞給String.format("...", ,)(而不是int,您可以通過從陣列中查找元素,推測可能與指數i獲得)。

由於它是String.format的一個參數,所以很可能沒有得到編譯器或IDE警告。

所以,如果你解決這個問題,代碼看起來像這樣,你可以從那裏拿走它。

for (int i = 0; i <= maxInterval.length; i++) { 
     if (i != maxInterval.length - 1) 
      g2.drawString(String.format("[%d,%d]", minInterval[i], maxInterval[i]), 20, 60 + (30) * i); 
     else if (i == maxInterval.length - 1) 
      g2.drawString(String.format("[%d,%d]", minInterval[i], maxInterval[i]), 20, 60 + (30) * i); 
     else 
      g2.drawString("Score Ranges", 20, 60 + (30) * i); 
    } 
+0

爲什麼?沒有人從複製/粘貼代碼中學到任何東西。 – Bart

+0

我認爲「我<= maxInterval.length」應該是「我

+0

這不是*複製/粘貼*,它是*固定*;)...採取點,我添加了一個解釋 – vikingsteve