2017-01-17 1 views
-3

Je prends le message entré, en ajoutant 2 à la valeur Unicode de chaque lettre, puis en l'imprimant, j'ai du mal à inclure les espaces entre les mots. Si la phrase était "pizza au fromage", elle imprimait "ejggj" puis s'arrêtait sur l'espace. Comment puis-je réparer ça?Comment conserver des espaces dans un message codé?

package exercises; 
import java.util.Scanner; 
public class Ex10 { 

     public static void main(String[] args) { 
      Scanner scanner = new Scanner(System.in); 
       //Ask for message 
       System.out.println("Enter a string: "); 
       String message = scanner.next(); 

       char[] array = message.toCharArray(); 

       //Encode message 
       for(int i = 0; i < array.length; i++) 
       { 
        char letter; 
        letter = array[i]; 
        if (array[i] =='y') 
        { 
         array[i] = 'a'; 
        } 
        else if (array[i] == 'z') 
        { 
         array[i] = 'b'; 
        } 
        else if (array[i] == letter) 
        { 
         letter += 2; 
         array[i] = letter; 
        } 
        else 
        { 
         letter = ' '; 
        } 
       } 
       //Give back encoded message 
       System.out.print("Encoded message: "); 
       System.out.println(array); 
     }//main 
    }//class 
+0

'if (lettre == '') continuer;' –

Répondre

1

Mohsen_Fatemi est partiellement faux. Dans le cadre de cette question, il a complètement tort.

Votre problème concernant votre partie manquante de la phrase ne provient pas de votre boucle et des conditions qui s'y trouvent, mais de votre utilisation du scanner.

La méthode scanner.next() est lue jusqu'à ce qu'elle rencontre un espace blanc, qu'il s'agisse d'un espace, d'un onglet ou d'une nouvelle ligne. Vous devez utiliser nextLine() pour obtenir votre entrée complète.

Mohsen_Fatemi a raison à propos de votre algorithme. Mais cette question n'était pas à ce sujet. Ne pas rejeter son entrée si.

+0

Merci Bruno Delor! Je comprends ce que tu voulais dire et tu as beaucoup aidé. Mon programme fonctionne maintenant. –

+0

De rien. N'hésitez pas à lire la documentation officielle de Java ainsi qu'à jeter un coup d'œil sur les différentes méthodes offertes par la classe scanner. Je vous ai expliqué rapidement comment fonctionne Scanner, mais on peut dire à la classe d'utiliser d'autres éléments comme délimiteur. Par défaut, il s'agit d'un espace blanc mais vous pouvez le définir sur d'autres caractères (pour lire un fichier CSV par exemple, même si ce n'est pas un moyen efficace de lire un fichier CSV) –

+0

@BrunoDelor mentionner à nouveau mon nom :) –

0

changer votre code int cette façon, vous voulez échapper quand vous avez l'espace dans votre chaîne, donc je l'ai été ajouté une condition if(array[i]==' ') continue; quand on voit le caractère d'espace nous sauter cette ronde de boucle et passer à l'itération suivante

for(int i = 0; i < array.length; i++) { 
     if (array[i] =='y'){ 
      array[i] = 'a'; 
     }else if (array[i] == 'z'){ 
      array[i] = 'b'; 
     }else{ 
      if(array[i]==' ') continue; 
      array[i] += 2; 
     } 
} 
+0

@I. Adoubleo si vous trouvez cela vrai, marquez ma réponse comme vraie, merci –

+0

Vous ne répondez pas à sa question. Vous avez raison à propos de son algorithme, mais son problème était ailleurs. –

+0

@BrunoDelor zoro ... –