【问题标题】:Return Multiple Arrays Using for Loop Inside toString Class在 toString 类中使用 for 循环返回多个数组
【发布时间】:2015-12-23 14:02:02
【问题描述】:

这是我目前所拥有的。这个程序基本上做的是接受用户输入(他们的社会安全号码),验证他们的输入格式是否正确(XXX-XX-XXXX),将经过验证的输入添加到数组列表中。现在最后一步是创建一个 toString() 方法,该方法将返回一个人类可读的字符串表示添加到数组中的所有社会安全号码。此方法必须使用 for 循环,并且必须每行打印 1 个社会安全号码条目。例如:

“您输入的社会安全号码是:
345-43-5674
456-62-8435
910-70-0053"

package SSNServerStorage;

public class SSNArray
{
    private String[] SSNNumber;
    private int arrayCount;

    public SSNArray(){
        SSNNumber = new String[300];
        arrayCount = 0;
    }

    public SSNArray(int arraySize){
        SSNNumber = new String[arraySize];
        arrayCount = 0;
    }

    public String[] getSSNNumber(){
        return SSNNumber;
    }

    public int getArrayCount(){
        return arrayCount;
    }

    public boolean validateSSNNumber(String SSNFormat){
        return SSNFormat.matches("\\d{3}-\\d{2}-\\d{4}");
    }

    public String addSSN(String SSNFormat){
        if (validateSSNNumber(SSNFormat)){
            return SSNNumber[arrayCount++] = SSNFormat;
        }else{
            return null;
        }
    }

    public String toString(){
        System.out.println("The Social Security Numbers you entered are:");

        for()
        {
            //
            //
            //
            //
        }
    }
}

【问题讨论】:

  • 将你的 for 循环放在测试类中
  • 尝试使用StringBuilder
  • 你有没有尝试过,或者这只是一个为你写代码的请求?您不应该在 toString 方法中打印输出。该方法应该用于创建和返回对象的字符串表示,而不是打印它。
  • @fabian 我认为这个问题只是误用了“打印”这个词,但是 OP 的澄清可能会很好。

标签: java arrays loops for-loop tostring


【解决方案1】:
StringBuilder strbul = new StringBuilder()
    for(int i=0;i<SSNNumber.length;i++)
            {
                strbul.append(SSNNumber[i]).append("\n");
            }
return strbul.toString();

【讨论】:

  • 循环应该限制在arrayCount
【解决方案2】:

您可以声明 String 来连接所有 SSNumber。

@Override
public String toString(){
    String str = "The Social Security Numbers you entered are:\n";
    for(int x=0; x< arrayCount; x++)
        str += SSNumber[x] + "\n";
    return str;
}

由于它是一个toString() 方法,您将希望返回该类的字符串表示,而不是执行println()

【讨论】:

  • 从不在循环中使用String += String。使用StringBuilder
  • @Andreas 这看起来像一个学校作业,根据我在大学和学院的知识,他们不希望你使用 StringBuilder。字符串对他们来说就足够了。
  • @Andreas 谢谢老兄,改变了。
  • 你可能对“学校作业”有意见,只是形式很糟糕,很伤人的神经。 ;-)
  • 你得到了我的支持。在:之后添加\n,更常见的是使用i作为索引变量。
【解决方案3】:

只需连接:

@Override
public String toString(){
String s = "The Social Security Numbers you entered are:\n";
    for(int i =0; i < SSNNumber.length; i ++)
        s +=SSNNumber[i]+"\n";
    return s;
}

【讨论】:

  • 从不在循环中使用String += String。使用StringBuilder
  • 另外,看起来并非数组中的每个元素都需要包含一个字符串。
  • 循环应该限制在arrayCount
【解决方案4】:

您的toString 方法没有正确的签名,它应该返回String。这应该可以满足您的需求:

@Override
public String toString(){
    StringBuilder sb = new StringBuilder("The Social Security Numbers you entered are:\n");

    for (int i = 0; i < arrayCount; i++) {
        sb.append(SSNNumber[i]).append("\n");
    }

    return sb.toString();
}

还记得使用@Override 注解。

【讨论】:

  • @Andreas 你是对的,感谢提醒 - 在第一次阅读时没有注意到这一点。答案已更正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2016-11-12
  • 2015-11-24
  • 1970-01-01
  • 2022-09-26
相关资源
最近更新 更多