0
votes

J'ai des problèmes avec des zéros de premier plan

Je tente d'obtenir ceci pour reconnaître les principaux zéros de mon programme et je pensais utiliser "String.Format ("% 03d ", code); ' s'en occuperait, mais je ne reçois toujours pas le résultat attendu.

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");
        }
    }
}


1 commentaires

Pourquoi ne pas obtenir l'utilisateur de saisir une chaîne ?


4 Réponses :


2
votes

Vous éliminez la valeur formatée. Vous devez la stocker dans une variable et la comparer comme chaîne:

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


1 commentaires

Je vous remercie, je n'ai pas vu de formaté. J'apprécie les connaissances partagées :).



3
votes

Vous faites quelque chose de mal ici.

011 , 010 , 001 sont octal numéros , comme ils commencent avec un zéro.
En outre, en utilisant string.format est inutile ici, car la valeur résultante n'est pas utilisée.
Cela pourrait être la raison pour laquelle votre si ne sont pas pris en compte. xxx

maintenant, vous pouvez utiliser formatévalue en tant que Valeur de comparaison pour votre si déclarations.
Exemple xxx

Notez que transformer peut-être le int dans une chaîne n'est pas nécessaire. Mais au cas où vous insistez pour le faire, une bonne pratique consiste à utiliser une chaîne constante comme opérande qui appelle égale (...) .


0 commentaires

0
votes

Eh bien, string.format ("% 03d", code) , renvoie une chaîne , et que vous comparez à entiers (OCTAL les entiers, comme l'a souligné LPPEDD).

Vous devez stocker la chaîne formatée à une variable, par exemple xxx

puis comparez-le sur les chaînes dans vos instructions if / else, comme: xxx


0 commentaires

0
votes

Ne pas formater et retirer les catastrophes de la section 0 dans la condition et utilisez le commutateur

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;
}


2 commentaires

J'ai besoin de chaque numéro pour être trois entiers longs, les zéros principaux sont une exigence.


@Norhabboub mais cette seule représentation interne des codes et ne peut faire aucune différence comment ils sont représentés en interne, "011" et 11 sont également uniques. Si ce serait une exigence, vous devez obliger l'utilisateur à saisir un code à 3 chiffres et à lire comme une chaîne ( sc.next () )