2013-11-02 3 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

Я думаю, что «i <= maxInterval.length» должно быть «i

+0

Это не * копировать/вставлять *, это * исправлено *;) ... сделанное, я добавил объяснение – vikingsteve

Смежные вопросы