Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 为了让程序绘制如图1所示的图像,我应该对代码做什么更改?_Java_Draw - Fatal编程技术网

Java 为了让程序绘制如图1所示的图像,我应该对代码做什么更改?

Java 为了让程序绘制如图1所示的图像,我应该对代码做什么更改?,java,draw,Java,Draw,这是预期输出: 这就是我的代码产生的结果: 这是代码。我应该对其进行哪些更改,以便生成正确的图像 package blatt03; import java.awt.*; import javax.swing.JFrame; public class LoesungKegel extends JFrame { private static final long serialVersionUID = 1L; public LoesungKegel() { super();

这是预期输出:

这就是我的代码产生的结果:

这是代码。我应该对其进行哪些更改,以便生成正确的图像

package blatt03;

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

public class LoesungKegel extends JFrame {
private static final long serialVersionUID = 1L;

public LoesungKegel() {
    super();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setSize(610, 417);
    this.setTitle("Lösung in der Klasse " + this.getClass().getName());
    this.setVisible(true);
}

public static void main(String[] args) {
    new LoesungKegel();
}

public void paint(Graphics g) {
    int x25 = this.getWidth() / 4;
    int x75 = this.getWidth() * 3 / 4;
    int y25 = this.getHeight() / 4;
    int y75 = this.getHeight() * 3 / 4;

    double stepX = getWidth() / 40;
    double step1 = getHeight()  / 40;

    g.drawLine(x75, y25, x25, y25);

    g.drawLine(x75, y25, x25, y75);

    g.drawLine(x25, y75, x75, y75);

    g.drawLine(x25, y25, x75, y75);

    for (int i = 0; i < 40; i++) {

         g.drawLine(x25, y25, x25/2 + (int) (stepX * i), y25/2 - (int) (step1 * i));

        g.drawLine(x25/2 + (int) (stepX * i), y25/2 - (int) (step1 * i), x75, y75);

    }

}
}
包blatt03;
导入java.awt.*;
导入javax.swing.JFrame;
公共类LoesungKegel扩展JFrame{
私有静态最终长serialVersionUID=1L;
公共LoesungKegel(){
超级();
setDefaultCloseOperation(关闭时退出);
这个.setSize(610417);
this.setTitle(“LÃ∗sung in der Klasse”+this.getClass().getName());
此.setVisible(true);
}
公共静态void main(字符串[]args){
新LoesungKegel();
}
公共空间涂料(图g){
int x25=this.getWidth()/4;
int x75=this.getWidth()*3/4;
int y25=this.getHeight()/4;
int y75=这个.getHeight()*3/4;
双步长x=getWidth()/40;
双步骤1=getHeight()/40;
g、 抽绳(x75、y25、x25、y25);
g、 抽绳(x75、y25、x25、y75);
g、 抽绳(x25、y75、x75、y75);
g、 抽绳(x25、y25、x75、y75);
对于(int i=0;i<40;i++){
g、 抽绳(x25,y25,x25/2+(内部)(步骤x*i),y25/2-(内部)(步骤1*i));
g、 抽绳(x25/2+(内部)(stepX*i),y25/2-(内部)(step1*i),x75,y75);
}
}
}

而不是图2,这是我的代码当前显示的内容。

这很接近,同时保持了方法的要点

public void paint(Graphics g) {
    int x25 = this.getWidth() / 4;
    int x75 = this.getWidth() * 3 / 4;
    int y25 = this.getHeight() / 4;
    int y75 = this.getHeight() * 3 / 4;
    int x50 = this.getWidth() / 2;
    int y50 = this.getHeight() / 2;

    int stepX = (x75 - x25) / 40;

    g.drawLine(x75, y25, x25, y25);

    g.drawLine(x75, y25, x25, y75);

    g.drawLine(x25, y75, x75, y75);

    g.drawLine(x25, y25, x75, y75);

    for (int i = 1; x25 + (i * stepX) < x75; i++) {

        g.drawLine(x50, y50, x25 + (stepX * i), y25);

        g.drawLine(x50, y50, x25 + (stepX * i), y75);

    }

}
public void绘制(图形g){
int x25=this.getWidth()/4;
int x75=this.getWidth()*3/4;
int y25=this.getHeight()/4;
int y75=这个.getHeight()*3/4;
int x50=this.getWidth()/2;
int y50=this.getHeight()/2;
int-stepX=(x75-x25)/40;
g、 抽绳(x75、y25、x25、y25);
g、 抽绳(x75、y25、x25、y75);
g、 抽绳(x25、y75、x75、y75);
g、 抽绳(x25、y25、x75、y75);
对于(int i=1;x25+(i*stepX)
您试图生成的图像比您试图使用的代码要简单得多。它只是直线的一端水平向前移动,而另一端向后移动相同的量。这就是你将如何实现这样的目标(假设你试图画40条线)

@覆盖
公共空间涂料(图g){
//填充背景
g、 setColor(Color.WHITE);
g、 fillRect(0,0,getWidth(),getHeight());
int x25=this.getWidth()/4;
int x75=this.getWidth()*3/4;
int y25=this.getHeight()/4;
int y75=这个.getHeight()*3/4;
//画内线
g、 setColor(颜色:浅灰色);
内部宽度=x75-x25;
双台阶=宽度/40.0;
对于(双i=0;i
我建议1)玩电脑并分析代码实际执行的操作,或2)在调试器中逐步检查代码,查看中间值,并查看它们是否与预期一致。看起来
y
值是常量,
x
值在中点对称;我想你这里没有。嗨,大卫。我认为对于新程序员来说,你有一个共同的问题,那就是你试图在一个步骤中做太多的事情。我建议在
for
循环中更改这些调用,以便用不同的方法计算坐标。这将使计算更容易出错。查看第一张图像,很明显每个线段都从垂直坐标
y25
开始,并在
y75
结束(如果您愿意,也可以反过来)。非常感谢您的回答!Leo的答案是更好的方法,更准确地符合您的期望结果。@DavidVolpe如果您认为Leo的答案完全回答了您的问题,请将其标记为回答您的问题(我认为确实如此)。
@Override
public void paint(Graphics g) {
    // fill background
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, getWidth(), getHeight());

    int x25 = this.getWidth() / 4;
    int x75 = this.getWidth() * 3 / 4;
    int y25 = this.getHeight() / 4;
    int y75 = this.getHeight() * 3 / 4;

    // draw inner lines
    g.setColor(Color.LIGHT_GRAY);
    int width = x75 - x25;
    double step = width / 40.0;
    for (double i = 0; i < width; i += step) {
        g.drawLine((int)(x25 + i), y25, (int)(x75 - i), y75);
    }

    // draw outer lines
    g.setColor(Color.BLACK);
    g.drawLine(x25, y25, x75, y25);
    g.drawLine(x25, y75, x75, y75);
    g.drawLine(x25, y25, x75, y75);
    g.drawLine(x75, y25, x25, y75);
}