【问题标题】:StringBuilder not printing its value? [closed]StringBuilder 不打印其值? [关闭]
【发布时间】:2015-10-05 06:12:49
【问题描述】:

我是java的菜鸟,所以如果这是一个简单的问题,我很抱歉。

我一直觉得有趣的是,您可以通过将数字相加来将一个数字压缩为一个数字。因此,我决定尝试制作一个程序来为我做这件事!这是一个例子。

输入: 557

5 + 5 + 7 = 17

1 + 7 = 8

答案: 8

看!这显然适用于任何数字。但是,我的程序在没有输出的情况下终止。谁能帮我吗?我不太习惯使用 TRINGBuilder,所以我认为这可能是问题所在。

import java.util.Scanner;
import java.lang.StringBuilder;

public class MagicNumberApp
{
    public static void main (String [] args)
    {
        int number;
        String numberstring;
        boolean keepGoing = false;

        Scanner input = new Scanner(System.in);
        StringBuilder builder = new StringBuilder();

        sopl("Welcome to Magic Number! \nThe idea is to add the idividual digits of a number "
                + "\nuntil it is condensed into a one digit number.\n\nInput a number...");
        sop(">");

        number = input.nextInt();

        numberstring = Integer.toString(number);

        if (numberstring.length() < 1)
            keepGoing = true;

        sopl("");

        number = 0;

        while (keepGoing)
        {
            for (int i = 0; i < numberstring.length(); i++)
            {
                number += Character.getNumericValue(numberstring.charAt(i));
                builder.append("+" + numberstring.charAt(i) + " ");
            }
            builder.append("=" + number);
            sopl(builder);

            if (numberstring.length() > 1)
            {
                numberstring = Integer.toString(number);
                number = 0;
                sopl("");
            }
            else
            {
                keepGoing = false;
            }
        }

    }

    public static void sop (Object o)
    {
        System.out.print(o);
    }

    public static void sopl (Object o)
    {
        System.out.println(o);
    }

}

【问题讨论】:

  • keepGoing 为假。

标签: java string for-loop int stringbuilder


【解决方案1】:

您的keepGoing 逻辑是倒退的。您将keepGoing 设置为true 是输入的数字小于1 位并且您将其初始化为false

if (numberstring.length() < 1)
    keepGoing = false;

所有数字都至少有一位数字,即使是0,所以在while 循环之前不需要进行上述测试。去掉它。但是你必须将keepGoing初始化为true

【讨论】:

  • 绝对是这样。输出仍然很混乱,但它现在可以工作了。谢谢!
【解决方案2】:

我认为问题出在这一行:

if (numberstring.length() < 1)
            keepGoing = true;

现在说keepGoing 仅在numberstring 的长度为0 时才为真。您可以将其更改为如下内容:

if (numberstring.length() > 1)
                keepGoing = true;

编辑:我还有一个建议。如果用户输入包含一位数字,您可以添加 else 语句以打印消息:

else
    sopl(number + " only has one digit. Try again!");

【讨论】:

    【解决方案3】:

    除了所有的答案。我建议您将输入读取为字符串,并将初始转换保存为字符串。

        numberstring = input.nextLine();
    

    【讨论】:

    • 我这样做是有原因的。在后来的修订中,我为 InputMismatchException 添加了 try/catch。
    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    相关资源
    最近更新 更多