Java:循环增量不从0开始

时间:2016-11-02 03:57:38

标签: java for-loop drawing increment zero

我检查了其他资源,但却找不到有用的东西。但是我试图弄清楚如何在0处开始循环增量而不是1来绘制椭圆内部的数字,如下所示。

我很感激帮助。

我的代码:(绘图面板:http://www.buildingjavaprograms.com/DrawingPanel.java

// Draws boxed ovals using a for loop.

import java.awt.*;

public class DrawLoopFor 
{
    public static void main(String[] args) 
    {
        DrawingPanel panel = new DrawingPanel(501, 251);
        panel.setBackground(Color.CYAN);

        Graphics g = panel.getGraphics();
        int sizeX = 50;
        int sizeY = 25;

        for (int i = 0; i < 11; i++) 
        {
            int cornerX = i*50;
            int cornerY = i*25;

            g.setColor(Color.WHITE);
            g.fillOval(cornerX + 5, cornerY + 5, sizeX-10, sizeY-10);
            g.setColor(Color.BLACK);
            g.drawString("" + i, cornerX - 28, cornerY - 8);
            g.setColor(Color.BLACK);
            g.drawRect(cornerX, cornerY, sizeX, sizeY);
        }
    }
}

我的输出(错误): My incorrect output

正确输出: Correct output

2 个答案:

答案 0 :(得分:4)

您在前一个框中绘制文本而不是当前框。这就是为什么最后一个框是空的,零点是在可见屏幕之外绘制的。

最有可能的原因是你在绘制时从cornerX中减去28。

尝试添加而不是减去。 由于我没有你的DrawingPanel课程,我无法确认你需要的确切偏移到cornerX和cornerY,但我认为你应该使用类似的东西:

g.drawString("" + i, cornerX + 22, cornerY + 17);

(22为X坐标,因为你正在绘制文本的开头3个像素在框的中间之前,25 - 3 = 22; 17为Y坐标,因为高度是25,你之前是绘制文本的基线8高于框的末尾,所以25 - 8 = 17)

答案 1 :(得分:1)

添加tempi变量并将条件if i=0设置为temp = 1并乘以tempi而不是i

试试这个

for (int i = 0; i < 11; i++) { 
    int tempi; 
    if(i==0) { 
        tempi=1; 
    } else { 
        tempi=i 
    } 
   int cornerX = tempi*50; int cornerY = tempi*25; 
}