У меня проблемы с ведущими нулями

Я пытаюсь заставить это распознавать начальные нули в моей программе, и я подумал об использовании '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?

achAmháin 06.03.2019 21:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
206
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

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

Спасибо, я не видел formatted.equals, когда исследовал это. Я ценю общие знания :).

Nohabo 06.03.2019 21:41

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

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) возвращает нить, и вы сравниваете с целые числа (восьмеричные целые числа, как указал 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;
}

Мне нужно, чтобы каждое число состояло из трех целых чисел, обязательны начальные нули.

Nohabo 06.03.2019 21:39

@NorHabboub Но это только внутреннее представление кодов, и не имеет значения, как они представлены внутри, «011» и 11 одинаково уникальны. Если это требование, вы должны заставить пользователя ввести трехзначный код и прочитать его как строку (sc.next())

Joakim Danielson 06.03.2019 21:42

Другие вопросы по теме