0

我试图通过尝试并查看会发生什么来弄清楚我是否理解各种 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.

编辑:我不知道技术术语是什么,当它在屏幕上喷出红色代码时,老师只是称之为呕吐。

编辑 2: 仍然会重新添加静态数据。新的错误消息是

>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简介...

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

4

3 回答 3

2

您的主要方法不是静态的,它不会创建您的类功能的实例。

尝试这个:

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);

  }  
}

您可能还可以创建 methods和static re(),因为它们不使用类实例的任何字段。gr()bl()

你用什么Java书来学习?

于 2013-10-30T20:23:33.650 回答
0

正如 mwhs 所说,您的主要方法不是静态的,并且永远不会调用您生成颜色的函数。意味着你的价值观是空的。作为提示,您不必在构造函数中包含变量名。

于 2013-10-30T20:29:47.313 回答
0

使主要方法静态。创建该类的新实例。(你应该在另一个方法中移动主函数中的东西,是的,它是一个方法,而不是一个函数。另外,如果你没有任何严肃的编程背景,不要尝试像那样学习。事情会变得棘手。)记住,谷歌和文档是你的朋友。

于 2013-10-30T20:27:13.823 回答