我试图通过尝试并查看会发生什么来弄清楚我是否理解各种Java内容(然后,不可避免地,试图找出出了什么问题)。我想我不理解函数,因为我所做的每一次尝试都让DrJava犹豫不决。
我现在正在尝试做的最接近工作的工作是
import java.awt.Color;
public class Functional {
int r;
int g;
int b;
public int re(int r){
r = (int)(Math.random() * (255 - 0)) + 0;
return r;
}
public int gr(int g){
g = (int)(Math.random() * (255 - 0)) + 0;
return g;
}
public int bl(int b){
b = (int)(Math.random() * (255 - 0)) + 0;
return b;
}
public void main(String[] args) {
StdDraw.setPenColor(new Color (r, b, g));
StdDraw.filledCircle(.5, .5, .6);
StdDraw.setPenColor( new Color (r, g, b));
StdDraw.filledCircle(.5, .5, .2);
}
}
它可以编译,但是当我尝试运行它时,java barfs。
编辑:我不知道这个专业术语是什么,老师只是在屏幕上喷出红色代码时称之为barfing。
编辑2:仍然重新添加静态的barfs。新的错误消息是
>java.lang.NullPointerException
>at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>at java.lang.reflect.Method.invoke(Unknown Source)
>at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
编辑3:
(另外,如果你没有任何严肃的编程背景,不要试图像那样学习。>事情可能会变得棘手。
但。。。但是这门课是CS入门...
我不明白函数和方法之间有什么区别,或者如果你不启动一个全新的程序,"创建类的新实例"是什么意思。
main 方法不是静态的,它不会创建类 Function 的实例。
试试这个:
import java.awt.Color;
public class Functional {
int r;
int g;
int b;
public int re(){
return (int)(Math.random() * (255 - 0)) + 0;
}
public int gr(){
return (int)(Math.random() * (255 - 0)) + 0;
}
public int bl(){
return (int)(Math.random() * (255 - 0)) + 0;
}
public static void main(String[] args) {
Functional f = new Functional();
f.r = f.re();
f.g = f.gr();
f.b = f.bl();
StdDraw.setPenColor(new Color (f.r, f.b, f.g));
StdDraw.filledCircle(.5, .5, .6);
StdDraw.setPenColor( new Color (f.r, f.g, f.g));
StdDraw.filledCircle(.5, .5, .2);
}
}
您可能还会使方法re()
、gr()
和bl()
静态,因为它们不使用类实例的任何字段。
你用什么Java书来学习?
使主方法成为静态方法。创建类的新实例。(你应该在另一个方法中移动主函数内的东西,是的,它是一个方法,而不是一个函数。另外,如果你没有任何严肃的编程背景,不要试图像那样学习。事情可能会变得棘手。请记住,谷歌和文档是你的朋友。
正如 mwhs 所说,您的 main 方法不是静态的,并且永远不会调用用于生成颜色的函数。这意味着您的值为空。作为提示,您不必在构造函数中包含变量名称。