2015-04-08 4 views
0
public static void main(String[] args) { 
    Scanner xis = new Scanner(System.in); 
    System.out.println("Insira o deslocamento desejado."); 
    int d = xis.nextInt(); 
    System.out.println("Digite a mensagem a ser enviada."); 
    String m = xis.nextLine(); 
    for (int i = 0; i < m.length(); i++) 
    { 

     int x = m.charAt(i) + d; 
     if(x > 'Z') 
     { 
      System.out.println((char)(x - 26)); 
     } 
     System.out.println((char)x); 
    } 

} 

Вот что консоль показывает:Следующий код не работает полностью

Insira о deslocamento desejado. запись

14 // пользователя

Digite Mensagem ГЭЭ enviada.

// После этого говорится, что оно было прекращено.

Я не понимаю, почему он не будет запускать весь код, это проблема с кодом или с моим затмением?

+0

Спасибо за ответы, я получил это прямо сейчас, «xis.nextLine», было ошибкой. – geraldinhotomas

+0

Если вход содержит пробелы 'xis.next() 'получит только первое слово. –

+0

Ну, да, я этого не заметил. Я попытался одним словом, и он работал, не думал об этом. Спасибо, что заметили. @AndersonVieira – geraldinhotomas

ответ

1

Когда вы вставляете номер и нажимаете ввод, вызов xis.nextInt() потребляет целое число, но не использует следующий символ строки. Поэтому, когда вы делаете xis.nextLine(), он читает следующий символ линии и заканчивает.

Обойти это добавить еще один вызов nextLine() только после nextInt(), как это:

System.out.println("Insira o deslocamento desejado."); 
int d = xis.nextInt(); 
xis.nextLine(); 
System.out.println("Digite a mensagem a ser enviada."); 
String m = xis.nextLine(); 
+0

Это на самом деле правильный ответ. Спасибо @AndersonVieira за комментарий dint test с пробелами. –

0

Это заканчивается, потому что, когда вы используете класс сканера для ввода, он будет принимать «Enter» в качестве входных данных.

Итак, когда вы вводите 14 и нажимаете 'enter', значит, это займет два входа. сначала 14, а вторая - пустая строка.

1

Привет, есть небольшое изменение, вы должны использовать следующий instaed od nextLine .. Ниже приведен код, также если вы вводите номер в неправильном формате, вы получите исключение несоответствия.

import java.util.Scanner; 

public class Practice_1 { 
    public static void main(String[] args) { 
     Scanner xis = new Scanner(System.in); 
     System.out.println("Insira o deslocamento desejado."); 
     int d = xis.nextInt(); 
     System.out.println("Digite a mensagem a ser enviada."); 
     String m = xis.next(); 
     for (int i = 0; i < m.length(); i++) 
     { 

      int x = m.charAt(i) + d; 
      if(x > 'Z') 
      { 
       System.out.println((char)(x - 26)); 
      } 
      System.out.println((char)x); 
     } 
     xis.close(); 

    } 
} 
0

Вот что я думаю, что произошло.

  • Scanner чтения «1» и «4» и возвращается Вам 14 из xis.nextInt()
  • Очень следующая вещь на входе новая линия (возврат введен после того, как 14 было напечатано).
  • Затем вы читаете строку ввода, которая будет читать и возвращать все до следующей новой строки. В этом случае это пустая строка, которая возвращает xis.nextLine().
  • Если вы затем прочитали еще одна линия Я думаю, вы можете получить остальную часть своего ввода.

Чтобы проверить это после того, как String m = xis.nextLine(); просто добавить:

m = xis.nextLine();

Это, вероятно, не самый лучший способ, чтобы закодировать это - но он должен указать, является ли то, что я предложил выше, на самом деле, что происходит.

0

Альтернатива вы можете использовать класс BufferedReader. Показать ниже код.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Scanner; 

public class StringDemo { 
    public static void main(String[] args) throws NumberFormatException, IOException { 
     //Scanner xis = new Scanner(System.in); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Insira o deslocamento desejado."); 
     //int d = xis.nextInt(); 
     int d = Integer.parseInt(br.readLine()); 
     System.out.println("Digite a mensagem a ser enviada."); 
     //String m = xis.nextLine(); 
     String m = br.readLine(); 
     for (int i = 0; i < m.length(); i++) 
     { 

      int x = m.charAt(i) + d; 
      if(x > 'Z') 
      { 
       System.out.println((char)(x - 26)); 
      } 
      System.out.println((char)x); 
     } 
    } 
} 
Смежные вопросы