Java 对于未按预期使用图形的循环

Java 对于未按预期使用图形的循环,java,for-loop,graphics,Java,For Loop,Graphics,我一直在尝试做一个for循环,水平复制屏幕上的垂直线,每一条线与之前的距离相同;然而,我的代码似乎不起作用,尽管看起来语法正确。我已经在下面发布了我的代码,希望有人能发现问题 class HVLines { public static void Lines(Graphics g) { int k; int x=0; for (k = 1; k <= 50; k++) { g.drawLine(20+x,150

我一直在尝试做一个for循环,水平复制屏幕上的垂直线,每一条线与之前的距离相同;然而,我的代码似乎不起作用,尽管看起来语法正确。我已经在下面发布了我的代码,希望有人能发现问题

class HVLines
{
    public static void Lines(Graphics g)
     {
    int k;
    int x=0;

        for (k = 1; k <= 50; k++)
         {
      g.drawLine(20+x,150,20+x,525);

        for (x = 1; x <= 50; x+=20)
            {

            }
        }
     }
}

应该是这样的。我不知道你是怎么用的,所以我不能保证它能用。另外,在循环中,使用x两次,但不使用k。更改其中一个,或者,如果您不需要,请删除其中一个循环

我很确定这条线是对角线,而不是水平线

for (k = 1; k <= 50; k++)  {
    for (x = 1; x <= 50; x+=20) {
        // Choose one of the following
        g.drawLine(20+k,150,20+x,525);
        g.drawLine(20+x,150,20+k,525);
    }
}
这一条创建了一条直线:

for (x = 1; x <= 50; x+=20) {
    g.drawLine(20+x,150,20+x,525);
}

空的内部循环有什么作用?是的,您的语法是正确的,这意味着它可以编译,但没有逻辑意义。不要在没有先计算出逻辑的情况下编码,先从计算机上开始,然后在纸上分开。在x上的内部循环中没有代码,所以它除了浪费CPU时间外什么都不做。外部循环中的drawLine调用将在第一次迭代中以x=0绘制,在所有后续迭代中以x=61绘制。也许把它移到内环里?k循环的目的是什么?如果您在循环中声明了变量,您会注意到x的误用,例如,对于int x=1;请改进这个问题:展示你试图实现的目标,解释你认为每行代码都在做什么。。。更多的细节可以帮助我们理解你想要实现什么以及为什么没有实现。下面是我想要实现的一个图像:外环的作用是什么。知道代码应该是什么样子的,你怎么能回答这样一个不完整、不可理解的问题呢?很明显,他想使用k和x。他忘了用其中的一个,别挑剔。我宁愿等他澄清他的问题,这样才能明智地回答。发布像上面这样毫无意义的代码对他或未来的访问者都没有帮助。这两种可能性都增加了。Happy?外部循环的目的是重复内部包含的功能并重复线路。在考虑到移除外环后,实际上没有必要开始。外部循环没有执行我认为它正在执行的功能。删除后,我的程序按预期运行。
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Line2D;
import javax.swing.JApplet;
import javax.swing.JFrame;

public class DrawLine extends JApplet {
    public void init() {
        setBackground(Color.white);
        setForeground(Color.white);
    }

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setPaint(Color.gray);
        for (int y = 0; y <= 300; y += 30) {
            g2.draw(new Line2D.Double(0, y, 300, y));
        }
    }

    public static void main(String s[]) {
        JFrame f = new JFrame("Line");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        JApplet applet = new DrawLine();
        f.getContentPane().add("Center", applet);
        applet.init();
        f.pack();
        f.setSize(new Dimension(300, 300));
        f.setVisible(true);
    }
}