繁体   English   中英

如何创建使用循环格式化数组输出的方法

[英]How to create a method that formats output of an array with a loop

我正在创建一个类,该类在未知大小和未知值的数组上调用方法。 除了格式化输出的方法之外,我已完成全部工作。 这堂课是关于储物柜租金的。 如果第一个储物柜已经租用了两天,那么这将是正确的:

    daysLeftRental[0] == 2;

如果可以租用更衣室,那将是对的:

    daysLeftRental[0] == -1;

换句话说,任何可用的储物柜的值为-1,因为有人无法租用-1天的储物柜。 我需要按以下方式格式化输出:

    Locker 0: 3
    Locker 1: Available
    Locker 2: 30

等等等等。 我不知道如何格式化我的代码,以便何时

    i = position of locker;
    daysLeftRental[i] == -1;

我的输出显示“可用”,何时

    daysLeftRental[i] >= 0

我的输出说什么值都存储在daysLeftRental [i]中。 供参考,如果我只返回-1而不是字符串“ available”,这就是我的代码的样子

    public String toString() {
        String formatOutput = " ";
        for (int i = 0; i < daysLeftRental.length; i++) {
             formatOutput = formatOutput + "\nLocker" 
             + i + ": " + daysLeftRental[i];
        }
        return formatOutput;
    }

这将产生:

    Locker 0: 3
    Locker 1: -1
    Locker 2: 30

这是您要尝试的吗?

public String toString() {
        String formatOutput = " ";
        for (int i = 0; i < daysLeftRental.length; i++) {
             formatOutput = formatOutput + "\nLocker " 
             + i + ": " + (daysLeftRental[i] == -1 ? "Available" : daysLeftRental[i].toString());
        }
        return formatOutput;
    }

您可以这样做:

public String toString() {
    String formatOutput = " ";
    for (int i = 0; i < daysLeftRental.length; i++) {
         if(daysLeftRental[i] >= 0){
             formatOutput = formatOutput + "\nLocker" 
             + i + ": " + daysLeftRental[i];
         }else{
             formatOutput = formatOutput + "\nLocker" 
             + i + ": Available";        
         }
    }
    return formatOutput;
}

或者,您可以在if语句之前准备一行,然后只需附加最后一个段:

public String toString() {
    String formatOutput = " ";
    for (int i = 0; i < daysLeftRental.length; i++) {
         formatOutput = formatOutput + "\nLocker" + i + ": ";
         if(daysLeftRental[i] >= 0){
              formatOutput += Integer.toString(daysLeftRental[i]);
         }else{
             formatOutput += "Available";        
         }
    }
    return formatOutput;
}

如果您不希望在if和else中都写同一行,则可以使用变量来保存数字或单词“ Available”

public String toString() {
    String formatOutput = " ";
    String status = "";

    for (int i = 0; i < daysLeftRental.length; i++) {
         if(daysLeftRental[i] >= 0){
             status = Integer.toString(daysLeftRental[i]);
         }else{
             status = "Available";
         }

         //concatenate it:
         formatOutput = formatOutput + "\nLocker" + i + status;
    }
    return formatOutput;
}

并且您可以使用inline-if,如上面的Aruna的答案(如果您理解),否则, 我建议(option-2) ,不要重复太多代码(option-1),也不要声明太多变量(option-3)。

编辑:-----

我不想夸大其词,但是您始终可以使用一种方法,如果您知道如何使用它们,则可以创建一个将返回数字或“可用”的方法。IF语句就可以使用该方法,仅此而已

public String getStatus(int x){

    if(x>=0){
        return Integer.toString(x);
    }else{
        return "Available";
    }
}

在for循环中,根本不要使用IF语句。 只需将getStatus()调用的结果连接到该行

formatOutput = formatOutput + "\nLocker" + i + ": " + getStatus(daysLeftRental[i]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM