我试图弄清楚我是否理解了各种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: 带有静态的barf还重新加入。新的错误信息是
>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:
(另外,如果你没有任何严肃的编程背景,也不要试着去学习。>事情可能会变得棘手。)
但是......但是班级是 Intro 到CS ...
我不明白函数和方法之间的区别,或者“创建类的新实例”意味着如果你没有启动一个全新的程序。
答案 0 :(得分:2)
您的main方法不是静态的,也不会创建您的类Functional的实例。
试试这个:
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书来学习?
答案 1 :(得分:0)
使main方法保持静态。 创建该类的新实例。 (你应该把主要功能中的东西移到另一个方法中,是的,它是一个方法,而不是一个函数。另外,如果你没有任何严肃的编程背景,也不要试着去学习。事情可能会变得棘手。) 请记住,Google和文档是您的朋友。
答案 2 :(得分:0)
正如mwhs所说,你的主要方法不是静态的,你的生成颜色的函数永远不会被调用。意味着您的值为null。 作为提示,您不必在构造函数中包含变量名称。