Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让这些java行算法工作?_Java_Algorithm_Line_Draw - Fatal编程技术网

如何让这些java行算法工作?

如何让这些java行算法工作?,java,algorithm,line,draw,Java,Algorithm,Line,Draw,我试图演示Bresenham的直线算法,而不是一种不太复杂的方法。我对编程非常陌生,我确信我的问题是基本的,但是一个解决方案和一个解释将非常有帮助。谢谢 这第一段代码直接出自我的书 import java.awt.*; import javax.swing.*; public class lines extends JPanel { int deltaX; int deltaY; int DY2; int DX2; int Di; public

我试图演示Bresenham的直线算法,而不是一种不太复杂的方法。我对编程非常陌生,我确信我的问题是基本的,但是一个解决方案和一个解释将非常有帮助。谢谢

这第一段代码直接出自我的书

import java.awt.*;
import javax.swing.*;

public class lines extends JPanel {
    int deltaX;
    int deltaY;
    int DY2;
    int DX2;
    int Di;

    public void basic(int x1, int y1, int x2, int y2, Graphics
    g){
        int deltaX = x2-x1;
        int deltaY = y2-y1;
        float m = (float)deltaY/(float)deltaX;
        float c = y1 - (m*x1);
        for (int x=x1; x<x2; x++){
            float floatY = (m*x) + c;
            int y = Math.round(floatY);
            g.drawLine(x,y,x,y);
        }
    }

   public void brz(int x1, int y1, int x2, int y2,
    Graphics g){
    deltaX = x2-x1;
    deltaY = y2-y1;
    DY2 = 2* deltaY;
    DX2 = 2* deltaX;
    Di = DY2 - deltaX;
    int x = x1;
    int y = y1;
    int prevy;
    while (x<x2) {
        x++;
        prevy = y;
        if (Di > 0){
            y++;
        }
        g.drawLine(x,y,x,y);
        Di = Di + DY2 - (DX2 * (y - prevy));
    }
}

public void paintComponent(Graphics g){
    basic(10,10,40,30,g);
    basic(10,10,40,90,g);
    brz(50,50,150,60,g);
    brz(50,50,150,120,g);
    brz(50,50,150,140,g);
}
现在它给了我这个:

应为
lines.java:15:')
油漆组件(图形g)

lines.java:15:表达式的非法开始

油漆组件(图形g)

将行更改为

    JFrame f = new JFrame("Swing Paint ");

    f.add(new YourPanelName());
    f.pack();
    f.setVisible(true);

然后做一些j2ee api研究:)

将类型传递到方法时,您正在声明类型。更改
paintComponent(图形g)
油漆组件(g)显示在第15行。只有在接受参数或声明字段/变量时才能声明类型。

在将对象放入方法之前,必须先构造该对象

paintComponent(图形g)-
paintComponent(g)-

public static void main(String[] args) {
    Graphics g = new Graphics(); 
    paintComponent(g);
}

如果你格式化了代码,你会看得更清楚。我们不是语法检查服务。@ajb我不是通灵者,我也不知道OP的意图。为OP编写代码并不是真正的方法。因为这似乎是编写一个线条绘制算法的课程,而不是如何使用Swing的课程,我认为帮助OP开始使用Swing所需的魔法咒语在这种情况下是合适的。@ajb很遗憾,除了要编辑的现有代码之外,我从未使用过Swing,我在这里会有不足之处。
Graphics g=new Graphics()无法编译。它是一个抽象类,您必须为它的所有方法写下代码。lus
paintComponent(g)
不会编译,因为它是一个实例方法,您从static
main
方法调用它,而没有一个实例应用它。@ajb确切地说,它应该是静态的才能被调用
public static void main(String[] args) {
    Graphics g = new Graphics(); 
    paintComponent(g);
}