我遇到前导零的问题

时间:2019-03-06 20:16:18

标签: java if-statement string-formatting

我试图让它识别程序中的前导零,并且我想使用'String.format(“%03d”,code);'会解决的,但是我仍然没有得到预期的结果。

import java.util.Scanner;  
import java.io.*;
public class Main{
    public static void main(String args[]){
        Scanner sc =new Scanner(System.in);
        System.out.println("Enter the shipment code :");
        int code = sc.nextInt();
        String.format("%03d", code);
        // fill the code
        if( code ==  111 ){
            System.out.println("All ways");
        }

        else if( code ==  110){
        System.out.println("Airway and Waterway");
        }

        else if( code ==  011){
        System.out.println("Waterway and Roadway");
        }
        else if( code ==  010){
        System.out.println("Waterway");
        }
        else if( code == 101){
        System.out.println("Airway and Roadway");
        }
        else if(code ==  001){
        System.out.println("Roadway");
        }
    }
}

4 个答案:

答案 0 :(得分:3)

您在这里做错了事。

011010001八进制数字,因为它们以零开头。
另外,在这里使用String.format是没有意义的,因为没有使用结果值。
这可能就是为什么不考虑您的if分支的原因。

final String formattedValue = String.format("%03d", code);

现在,您可以使用formattedValue作为if语句的比较值。
例子

if ("111".equals(formattedValue)) { ... }

请注意,可能不需要将int转换为String。但是,如果您坚持要这样做,一个好的做法是使用常量String作为调用equals(...)的操作数。

答案 1 :(得分:2)

您正在丢弃格式化的值。您需要将其存储在变量中,并将其与字符串进行比较:

String formatted = String.format("%03d", code);
if( formatted.equals("111") ){
    System.out.println("All ways");
}
// ...

答案 2 :(得分:0)

好吧,String.format("%03d", code)返回一个字符串,您正在与整数(八进制整数,如LppEdd所指出的)进行比较。

您应该将格式化的字符串存储到变量中,例如

String formatted = String.format("%03d", code);

,然后将其与if / else语句中的字符串进行比较,如下所示:

if(formatted.equals("011")) {...}

答案 3 :(得分:0)

请勿格式化并删除条件中的任何前导0,并使用switch

int code = sc.nextInt();
    // fill the code
switch(code) {
case 111:
    System.out.println("All ways");
    break;
case 110:
    System.out.println("Airway and Waterway");
    break;
case 11:
    System.out.println("Waterway and Roadway");
    break;
case 10:
    System.out.println("Waterway");
    break;
case 101:
    System.out.println("Airway and Roadway");
    break;
case 1:
    System.out.println("Roadway");
    break;
default:
    System.out.println("Unknown code " + code); 
    break;
}