尝试并且没有做java函数

时间:2013-10-30 20:15:41

标签: java stddraw

我试图弄清楚我是否理解了各种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 ...

我不明白函数和方法之间的区别,或者“创建类的新实例”意味着如果你没有启动一个全新的程序。

3 个答案:

答案 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。 作为提示,您不必在构造函数中包含变量名称。