【问题标题】:How can i return a value from a void method in java如何从java中的void方法返回值
【发布时间】:2014-02-28 02:06:15
【问题描述】:

好的,所以我有这段代码,显然渲染方法中的“g = gd”没有修改“g”的字段值。

我怎样才能让渲染方法修改字段g?

我想要一个图形字段,这样我就可以使用图形在渲染方法之外打印字符串,但我真的不知道该怎么做。

private Graphics g;

private BufferedImage background;

public Tutorial(Core core){
    background = core.getResources().getImage(4);
}

public void render(Graphics gd) {
    g = gd;
    g.drawImage(background, 0, 0, null);
}

编辑:

好的,这是整个课程我如何修改它以使 displayMessage 工作? 在 render() 之前调用了 tick() ,这可能是一个问题?

package com.andrewxd.spaceinvaders.levels;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

import com.andrewxd.spaceinvaders.main.Core;

public class Tutorial implements Levels{

    private Graphics g;

    private BufferedImage background;

    public Tutorial(Core core){
        background = core.getResources().getImage(4);
    }

    public void render(Graphics gd) {
        g = gd;
        g.drawImage(background, 0, 0, null);
    }

    public void tick() {
        displayMessage("Welcome", 200,200);
    }

    public void displayMessage(String message, int x, int y) {
        g.setFont(new Font("ARIAL", Font.BOLD, 20));
        g.setColor(Color.RED);
        g.drawString(message, x, y);
    }

    public void displayMessage(String message, int x, int y, Font font) {
        g.setFont(font);
        g.setColor(Color.WHITE);
        g.drawString(message, x, y);
    }

    public void displayMessage(String message, int x, int y, Font font, Color color) {
        g.setFont(font);
        g.setColor(color);
        g.drawString(message, x, y);
    }

}

【问题讨论】:

  • 您不能从 void 方法返回值。
  • render 正在修改g
  • 更改您传递给方法的相同引用...
  • 渲染不修改 g。因为我试图在 tick() 方法中使用 g.drawString() 并且它根本不起作用.. 我使用 System.out.println 来查看是否调用了该方法并且它是.. 但是 g.drawString()在渲染方法之外根本不工作
  • 你错了。问题不在于获得价值,而在于在渲染方法之外进行绘制,这可能是一个坏主意。让我们结束这个问题。另一个差评。

标签: java return void


【解决方案1】:
  • 你不能从 void 方法返回值,这就是 void 方法的目的,它会做它所做的事情并完成。

  • Java 是按值传递的,当你传递一个引用类型时,它的地址不会改变,但它的属性会受到改变的影响。

【讨论】:

    【解决方案2】:

    您可以尝试从您想要修改的工厂类中获取对象...但是不能使用 return ;在一个 void 方法中......

    您应该使用 google 并找到此案例的最佳实践和模式;-)

    【讨论】:

      【解决方案3】:

      如果使用非 void 类型,则返回,但您可以更改全局变量的数据。这样你就可以实现它,或者使用其他一些数据类型......

      【讨论】:

        【解决方案4】:

        当您不希望您的方法返回值时使用“void”。

        如果你想让它返回一些东西而不是“void”,输入你想要返回的类型。例如:

        public Graphics returnG(){
         Graphics g = new Graphics();
        return    g;
        
        }
        

        这将返回一个名为 g 的图形对象。

        但同样,void 方法不可能返回一些东西。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-03
          • 1970-01-01
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多