Java 分配变量,然后在参数中使用变量?
我正在做这些免费的斯坦福在线课程,学习Java。我被什么东西卡住了,一直没能弄明白。我想我的逻辑一定有问题。请查看下面的代码。我对它进行了评论,所以希望你能理解我在那里想做什么Java 分配变量,然后在参数中使用变量?,java,Java,我正在做这些免费的斯坦福在线课程,学习Java。我被什么东西卡住了,一直没能弄明白。我想我的逻辑一定有问题。请查看下面的代码。我对它进行了评论,所以希望你能理解我在那里想做什么 import acm.graphics.*; import acm.program.*; import java.awt.*; public class Pyramid extends GraphicsProgram { /** Width of each brick in pixels */ private
import acm.graphics.*;
import acm.program.*;
import java.awt.*;
public class Pyramid extends GraphicsProgram {
/** Width of each brick in pixels */
private static final int BRICK_WIDTH = 30;
/* Width of each brick in pixels */
private static final int BRICK_HEIGHT = 12;
/** Number of bricks in the base of the pyramid */
private static final int BRICKS_IN_BASE = 14;
/** The Width of the Base in px */
double baseInPx = BRICKS_IN_BASE * BRICK_WIDTH;
/** Taking the width of the window minus the width of the base and dividing by two
* to find the x axis starting point)
*/
double firstBrick = (getWidth() - baseInPx) / 2;
/* giving the y axis a variable name */
double baseHeight = getHeight();
public void run() {
add(new GRect(firstBrick,baseHeight,BRICK_WIDTH, BRICK_HEIGHT));
}
}
我想我在这一行的格式设置上一定出了问题:
double firstBrick = (getWidth() - baseInPx) / 2;
问题是x轴上的变量不起作用。如果我在那里硬编码一个数字,则会显示rect,但不会使用firstBrick
谢谢你的帮助
编辑:谢谢大家的帮助!你们几乎每个人都是对的。我刚刚学到了一些东西 我要试着帮你自己。尝试将计算移到run方法中,并打印出值,以查看它与硬编码值时所期望的值有何不同。我将尝试帮助您自助。尝试将计算移到run方法中,并打印出值,以查看它与硬编码值时的预期值有何不同。将firstBrick和baseHeight移到run方法中,然后查看是否有效
public void run() {
double firstBrick = (getWidth() - baseInPx) / 2;
double baseHeight = getHeight();
add(new GRect(firstBrick,baseHeight,BRICK_WIDTH, BRICK_HEIGHT));
}
我猜您的getWidth()和getHeight()是实例方法,而不是静态方法。因此,您不能在对象初始化块中调用它们(在示例代码中:任何方法之外的inits),因为金字塔对象尚未完全初始化
您还可以声明变量所在的位置,并在金字塔构造函数中初始化它们,这是首选方法。这就是构造器的作用。将firstBrick和baseHeight都移动到run方法中,看看是否有效
public void run() {
double firstBrick = (getWidth() - baseInPx) / 2;
double baseHeight = getHeight();
add(new GRect(firstBrick,baseHeight,BRICK_WIDTH, BRICK_HEIGHT));
}
我猜您的getWidth()和getHeight()是实例方法,而不是静态方法。因此,您不能在对象初始化块中调用它们(在示例代码中:任何方法之外的inits),因为金字塔对象尚未完全初始化
您还可以声明变量所在的位置,并在金字塔构造函数中初始化它们,这是首选方法。这就是构造函数的用途。看看这段代码
public class Assignment {
private String a = setString();
private String b;
public Assignment() {
b = "set in constructor";
}
private String setString() {
return b;
}
private String getA() {
return a;
}
public static void main(String[] args) {
System.out.println(new Assignment().getA());
}
}
这将打印空
我猜类似的事情正在发生。可能金字塔的宽度和高度是在构造过程中设置的,所以在那里调用getWidth和getHeight时默认为0.0。看看这段代码
public class Assignment {
private String a = setString();
private String b;
public Assignment() {
b = "set in constructor";
}
private String setString() {
return b;
}
private String getA() {
return a;
}
public static void main(String[] args) {
System.out.println(new Assignment().getA());
}
}
这将打印空
我猜类似的事情正在发生。可能金字塔的宽度和高度是在构造函数中设置的,因此在那里调用getWidth和getHeight时默认为0.0。尝试在run方法中或在构造函数中设置firstBrick和baseHeight
import acm.graphics.*;
import acm.program.*;
import java.awt.*;
public class Pyramid extends GraphicsProgram {
private static final int BRICK_WIDTH = 30;
private static final int BRICK_HEIGHT = 12;
private static final int BRICKS_IN_BASE = 14;
double baseInPx = BRICKS_IN_BASE * BRICK_WIDTH;
double firstBrick;
double baseHeight;
public void run() {
firstBrick = (getWidth() - baseInPx) / 2;
baseHeight = getHeight();
add(new GRect(firstBrick,baseHeight,BRICK_WIDTH, BRICK_HEIGHT));
}
}
尝试在run方法或构造函数中设置firstBrick和baseHeight
import acm.graphics.*;
import acm.program.*;
import java.awt.*;
public class Pyramid extends GraphicsProgram {
private static final int BRICK_WIDTH = 30;
private static final int BRICK_HEIGHT = 12;
private static final int BRICKS_IN_BASE = 14;
double baseInPx = BRICKS_IN_BASE * BRICK_WIDTH;
double firstBrick;
double baseHeight;
public void run() {
firstBrick = (getWidth() - baseInPx) / 2;
baseHeight = getHeight();
add(new GRect(firstBrick,baseHeight,BRICK_WIDTH, BRICK_HEIGHT));
}
}
您的问题是这一行:
double firstBrick = (getWidth() - baseInPx) / 2;
double firstBrick=(getWidth()-baseInPx)/2
在执行此行时,getWidth()返回0;该操作将导致不会绘制的负数
如前所述,您必须在构建UI后调用该函数。->run()您的问题是这一行:
double firstBrick = (getWidth() - baseInPx) / 2;
double firstBrick=(getWidth()-baseInPx)/2
在执行此行时,getWidth()返回0;该操作将导致不会绘制的负数
如前所述,您必须在构建UI后调用该函数。->run()这似乎确实奏效了。虽然我的理解是getHeight和getWidth用于调用实际图形框的属性,但这让我感到困惑。这仍然被认为是实例方法的一部分吗?这是正确的,但在对象完全构造之前,您不能依赖它初始化所有属性。SCJP的书中有一节是关于对象初始化序列的,这是一本学习Java细节的好书。这似乎确实奏效了。虽然我的理解是getHeight和getWidth用于调用实际图形框的属性,但这让我感到困惑。这仍然被认为是实例方法的一部分吗?这是正确的,但在对象完全构造之前,您不能依赖它初始化所有属性。SCJP的书中有一节是关于对象初始化序列的,这是一本学习Java细节的好书。我很感激。将计算放在run方法中确实做到了这一点。我现在试图理解为什么:-D…啊,这是因为“baseInPx”指的是实例方法吗?baseInPx是使用实例方法getWidth()计算的-这在实例的上下文之外没有意义。run方法是一个实例方法,与金字塔的实例相关联。我很感激。将计算放在run方法中确实做到了这一点。我现在试图理解为什么:-D…啊,这是因为“baseInPx”指的是实例方法吗?baseInPx是使用实例方法getWidth()计算的-这在实例的上下文之外没有意义。run方法是一个实例方法,与金字塔的实例关联。