java - java中返回变量作用域遇到问题

标签 java

我想返回一个由大字母 E 组成的 String/StringBuilder,并用 E 填充,这样我会得到如下所示的结果:

EEEEEE
E
E
E
EEEEEE
E
E
E
EEEEEE

我现在遇到的问题是我有一个 StringBuilder 值 sb,该值应该在嵌套 for 循环期间更新。我需要做什么才能让我的函数 drawLetters 返回 sb 以便我可以在我的 main() 函数中打印它?

我得到的错误是drawLetters缺少返回语句。我尝试将 sb 移到 for 循环之外,但 for 循环不会更新变量,因为它超出了 for 循环范围。

tl;dr - 对范围和 sb 变量应该去哪里感到困惑,以便我的函数 drawLetters 返回 sb

public class MCVE {

    public static String drawLetters(String string) {
        // Create BufferedImage object called "background".
        BufferedImage background = new BufferedImage(144, 32, BufferedImage.TYPE_INT_RGB);

        // Creates a Graphics2D object called "g" by calling the method get.Graphics() on the background
        Graphics g = background.getGraphics();

        // This decides what is drawn.
        g.drawString(string, 6, 12);

        StringBuilder sb = new StringBuilder();
        for (int y = 0; y < 32; y++) {
            for (int x = 0; x < 144; x++)
                sb.append(background.getRGB(x, y) == -16777216 ? " " : background.getRGB(x, y) == -1 ? string : "*");
            if (sb.toString().trim().isEmpty())
                continue;
        }
        return sb.toString();
    }


    public static void main(String[] args) {
        System.out.println(drawLetters("E"));
        //drawLetters("J");
        //drawLetters("K");
    }
}

最佳答案

您在循环内声明sb:

for (int y = 0; y < 32; y++) {
    StringBuilder sb = new StringBuilder();
    //...
} //Scope of sb ends here

因此它超出了外部 for 循环的范围。现在,您尝试在 for 循环内返回它,这可以工作,但不是您想要的。在循环之外声明它:

StringBuilder sb = new StringBuilder();
for (int y = 0; y < 32; y++) {        
    for (int x = 0; x < 144; x++)
        sb.append(background.getRGB(x, y) == -16777216 ? " " : background.getRGB(x, y) == -1 ? string : "*");
    if (sb.toString().trim().isEmpty()) 
        continue;        
}
return sb;

此外,如果您想打印sb,请使用toString()方法,并在返回之前执行;否则是一条不可达语句。

如果我是你,我会返回一个 String,而不是 StringBuilder。否则,每次调用该方法并尝试打印它时,您都必须添加 toString() 调用。您可以将方法签名更改为:

public static String drawLetters(String string)

然后在您的返回声明中

return sb.toString();

关于java - java中返回变量作用域遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54314443/

相关文章:

java - 使用 replaceWith 时避免 JSoup 生成空格

java - PrimeFaces 数据表初始 sortBy 不起作用

java - 使用 FreeMarker 从 select 返回值

java - 基于注释的请求验证

java - REST Spring Boot 中的复合主键用法

java - 当尝试从数据适配器检索 bean 时,为什么会出现错误 (ClassCastException)?

java - JNI + Java 平台 + 基于 Java 的应用服务器 + HTTP Web 服务器

java - 如何将自定义小部件与 SWT 中的 TreeItem 关联起来?

java - 为什么 AUTO_RESIZE_LAST_COLUMN 的作用与 AUTO_RESIZE_ALL_COLUMNS 类似?

java - 为ant生成build.xml文件的工具