2017-01-14 4 views
-2

Так что я делаю программу, которая принимает пользовательский ввод, и когда он находит символы, похожие на числа, он заменяет его числом. (Например, он заменяет O на 0, e на 3 и т. Д.) Проблема в том, что когда он находит пустое пространство, все это испортится. Вы можете проверить, компилируя код, что вывод полностью перепутан.Проблемы при обнаружении пробелов в строках

/* Program to encrypt text replacing some letters by similar numbers 
Done by: Gabriel Mello 
*/ 
import java.util.Scanner; 
import java.util.Random; 
public class Main { 
public static void main(String[] args) { 
    Scanner sc=new Scanner(System.in); 
    String input; //Allocating space for user input 
    char[] output=new char[100000]; //Allocating space for final output 
    while(true){ // Lets it work as many times as wished 


    System.out.println("Escribí la frase que quieras transformar"); // Spanish for input your frase 
    input=sc.next(); //Takes user input 

     for(int i=0; i<=input.length()-1;i++){ //Iterates over every char in the input 
        switch(input.charAt(i)){//Checks wether the current digit is valid for replacement, 
        case 'O':     // if it is, it replaces it, if not, it leaves it as it is. 
        case 'o': output[i]='0'; 
        break; 
        case 'L': 
        case 'l': 
        case 'I': 
        case 'i': output[i]='1'; 
        break; 
        case 'Z': 
        case 'z': output[i]='2'; 
        break; 
        case 'E': 
        case 'e': output[i]='3'; 
        break; 
        case 'A': 
        case 'a': output[i]='4'; 
        break; 
        case 'S': 
        case 's': output[i]='5'; 
        break; 
        case 'G': 
        case 'g': output[i]='6'; 
        break; 
        case 'T': 
        case 't': output[i]='7'; 
        break; 
        case 'B': 
        case 'b': output[i]='8'; 
        break; 
        case 'P': 
        case 'p': output[i]='9'; 
        break; 
        default: output[i]=input.charAt(i); 
        } 

     } 

      System.out.println(output); //Prints the output 
      for(int i=0;i<=output.length-1;i++){ //Resets the output array 
       output[i]=' '; 
      } 
    } 


} 
} 
+0

Добавить образец ввода и вывода ошибок в ваш вопрос –

+0

Ваш код печатает несколько новых строк, что затрудняет решение проблемы. Попробуйте переместить 'System.out.println (output)' из вашего цикла while. –

+0

Цикл while позволяет пользователю использовать программу несколько раз, не запуская ее снова и снова. Просто проигнорируйте его – Otomeram

ответ

1

Ввод сканера разбивается на пробелы. Поэтому, если вы введете 12 34, первый вход, который видит ваш код, - 12. Он проходит через цикл for(int i=0; i<=input.length()-1;i++), затем цикл while находит другой вход 34 и снова проходит через него. См. Документ Java:

Сканер разбивает свой ввод на токены с использованием шаблона разделителя, который по умолчанию соответствует пробелу.

Замените input=sc.next() на input=sc.nextLine(), чтобы исправить положение.

+0

Большое вам спасибо – Otomeram

+0

Что вы подразумеваете под 'while while, который находит другой вход« 34 »и снова запускает его?»? –

Смежные вопросы