Почему прерывается исполнение этой программы?

Здравствуйте, пишу программу, которая шифрует сообщение с помощью шифра Цезаря, столкнулся с одной проблемой после ввода переменной sdvig исполнение программы прерывается, никаких сообщений об ошибке не появляется, с чем это может быть связано?
package zadachi;

import java.util.Scanner;

public class wwwwww {
	static int sdvig;
	static char[] alphabet;
	private static Scanner in;
    public static void main(String[] args){
        in = new Scanner(System.in);
        sdvig = in.nextInt();
        byte x = 0; // Для заполнения массива с зашифрованным сообщением и для перебора
    	alphabet = new char[] {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        String message = in.nextLine();
        message = message.toLowerCase();
        char[] m = message.toCharArray(); // Незашифрованное сообщение
        char[] messageShifr; // Объявление массива с зашифрованным сообщением
        messageShifr = new char[m.length];
        int mes_len = m.length;
        while (mes_len != x) { //шифрование
        	byte element = plunk(m[x]);
        	if (element < 51 && element > -25) {
        		if (element > 25) {
        			element = (byte) (-25 + element);
        			messageShifr[x] = alphabet[element];
            		x++;
        		}
        		    else {
        			    if (element < 0) {
        				    element = (byte) (25 + element);
        				    messageShifr[x] = alphabet[element];
                		    x++;
        			    }
        			       else {
        				        messageShifr[x] = alphabet[element];
                		        x++;
        			       }
        		    }
        	    }
        	    else {
        	    	messageShifr[x] = m[x];
        	    	x++;
        	    }
        }
        for (int y = 0; y < messageShifr.length; y++) { //вывод зашифрованного сообщения
            System.out.print(messageShifr[y]);
        }
    }
    public static byte plunk(char k) { // перебирает alphabet  в посиках совпадений с k
    	byte i = 0;
    	while (i != 26) {
    		if (alphabet[i] == k) {
    			break;
    		}
    		    else {
    			    i++;
    		}
    	}
    	return  (byte) (i + sdvig);
    }
}
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
@Warlodya
String message = in.nextLine();
while(message.length()==0) message=in.nextLine();

или через in.next() читать слова по одному
Если я правильно помню nextInt() читает число, но оставляет символ новой строки, а nextLine() читает как раз только до этого символа вот и получается, что у вас message становится пустой и программа выполняется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы