我试图让它识别程序中的前导零,并且我想使用'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");
}
}
}
答案 0 :(得分:3)
您在这里做错了事。
011
,010
,001
是八进制数字,因为它们以零开头。
另外,在这里使用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;
}