У меня проблемы с ведущими нулями - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь заставить это распознать ведущие нули в моей программе, и я подумал, используя 'String.format ("% 03d", код);позаботился бы об этом, но я все еще не получил ожидаемый результат.

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 ]

3 голосов
/ 06 марта 2019

Вы делаете что-то не так здесь.

011, 010, 001 являются восьмеричными числами, так как они начинаются с нуля.
Также,использование String.format здесь не имеет смысла, поскольку полученное значение не используется.
Возможно, именно поэтому ваши if ветви не учитываются.

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

Теперь вы можете использовать formattedValue в качестве значения сравнения для ваших if операторов.
Пример

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

Обратите внимание, что, возможно, преобразование int в String не требуется.Но если вы настаиваете на этом, хорошей практикой является использование константы String в качестве операнда, который вызывает equals(...).

2 голосов
/ 06 марта 2019

Вы отбрасываете отформатированное значение. Вам нужно сохранить его в переменной и сравнить в виде строки:

String formatted = String.format("%03d", code);
if( formatted.equals("111") ){
    System.out.println("All ways");
}
// ...
0 голосов
/ 06 марта 2019

Не форматировать и не удалять любые начальные 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;
}
0 голосов
/ 06 марта 2019

Ну, String.format("%03d", code), возвращает строку , и вы сравниваете с целыми числами (восьмеричными целыми числами, как указывал LppEdd).

Вы должны сохранить отформатированную строку в переменной, например,

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

, а затем сравните его со строками в выражениях if / else, например:

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