我遇到前导零问题
I'm having issues with leading zeros
我试图让它识别我程序中的前导零,我认为使用 '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");
}
}
}
您正在丢弃格式化值。您需要将其存储在一个变量中并将其与字符串进行比较:
String formatted = String.format("%03d", code);
if( formatted.equals("111") ){
System.out.println("All ways");
}
// ...
你做错了。
011
、010
、001
是 八进制 数字,因为它们以零开头。
此外,使用 String.format
在这里毫无意义,因为结果值未被使用。
这可能就是为什么您的 if
分支未被考虑在内的原因。
final String formattedValue = String.format("%03d", code);
现在您可以使用 formattedValue
作为 if
语句的比较值。
范例
if ("111".equals(formattedValue)) { ... }
请注意,可能没有必要将 int
转换为 String
。但如果您坚持这样做,一个好的做法是使用常量 String
作为调用 equals(...)
.
的操作数
嗯,String.format("%03d", code)
,returns 一个 字符串 ,你正在与 整数 (八进制整数,正如 LppEdd 指出的那样)。
您应该将格式化后的字符串存储到一个变量中,例如
String formatted = String.format("%03d", code);
然后将其与 if/else 语句中的字符串进行比较,如下所示:
if(formatted.equals("011")) {...}
不要格式化和删除条件中的任何前导 0 并使用开关
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;
}
我试图让它识别我程序中的前导零,我认为使用 '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");
}
}
}
您正在丢弃格式化值。您需要将其存储在一个变量中并将其与字符串进行比较:
String formatted = String.format("%03d", code);
if( formatted.equals("111") ){
System.out.println("All ways");
}
// ...
你做错了。
011
、010
、001
是 八进制 数字,因为它们以零开头。
此外,使用 String.format
在这里毫无意义,因为结果值未被使用。
这可能就是为什么您的 if
分支未被考虑在内的原因。
final String formattedValue = String.format("%03d", code);
现在您可以使用 formattedValue
作为 if
语句的比较值。
范例
if ("111".equals(formattedValue)) { ... }
请注意,可能没有必要将 int
转换为 String
。但如果您坚持这样做,一个好的做法是使用常量 String
作为调用 equals(...)
.
嗯,String.format("%03d", code)
,returns 一个 字符串 ,你正在与 整数 (八进制整数,正如 LppEdd 指出的那样)。
您应该将格式化后的字符串存储到一个变量中,例如
String formatted = String.format("%03d", code);
然后将其与 if/else 语句中的字符串进行比较,如下所示:
if(formatted.equals("011")) {...}
不要格式化和删除条件中的任何前导 0 并使用开关
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;
}