2016-01-08 3 views
-4

я получаю сообщение об ошибке unreachable statement, когда я пытаюсь скомпилировать этот фрагмент кода на линии return oocc2.encrypt(input);:Недоступен Заявление при попытке запустить программу

public String decrypt(String input) { 
     OOCaesarCipher oocc1 = new OOCaesarCipher(26-mainKey1); 
     OOCaesarCipher oocc2 = new OOCaesarCipher(26-mainKey2); 
     return oocc1.encrypt(input); 
     return oocc2.encrypt(input); 

    } 

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

public String decrypt(String input) { 
     OOCaesarCipher oocc1 = new OOCaesarCipher(26-mainKey1); 
     return oocc1.encrypt(input); 
     } 

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

import edu.duke.*; 

public class CaesarCipherTwoKeys { 
    private String alphabetLower; 
    private String alphabetUpper; 
    private String shiftedAlphabetLower1; 
    private String shiftedAlphabetUpper1; 
    private String shiftedAlphabetLower2; 
    private String shiftedAlphabetUpper2; 
    private int mainKey1; 
    private int mainKey2; 
    public CaesarCipherTwoKeys(int key1, int key2) { 
     alphabetLower = "abcdefghijklmnopqrstuvwxyz"; 
     alphabetUpper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
     shiftedAlphabetLower1 = alphabetLower.substring(key1) + alphabetLower.substring(0,key1); 
     shiftedAlphabetUpper1 = alphabetUpper.substring(key1) + alphabetUpper.substring(0,key1); 
     shiftedAlphabetLower2 = alphabetLower.substring(key2) + alphabetLower.substring(0,key2); 
     shiftedAlphabetUpper2 = alphabetUpper.substring(key2) + alphabetUpper.substring(0,key2); 
     mainKey1 = key1; 
     mainKey2 = key2; 
    } 
    public String encrypt(String input) { 
     StringBuilder encryptedInput = new StringBuilder(input); 
     OOCaesarCipher oocc1 = new OOCaesarCipher(mainKey1); 
     OOCaesarCipher oocc2 = new OOCaesarCipher(mainKey2); 

     for (int index=0; index < input.length(); index++) { 
      if (index % 2 == 0 || index == 0) { 
       encryptedInput.replace(index,index+1,oocc1.encrypt(input.substring(index,index+1))); 
      } 
      else { 
       encryptedInput.replace(index,index+1,oocc2.encrypt(input.substring(index,index+1))); 
      } 
     } 
     return encryptedInput.toString(); 
    } 
    public String decrypt(String input) { 
     OOCaesarCipher oocc1 = new OOCaesarCipher(26-mainKey1); 
     OOCaesarCipher oocc2 = new OOCaesarCipher(26-mainKey2); 
     return oocc1.encrypt(input); 
     return oocc2.encrypt(input); 

    } 
} 

А вот код OOCC, который я использую в качестве примера для написания этого один:

import edu.duke.*; 


public class OOCaesarCipher { 
    private String alphabetLower; 
    private String alphabetUpper; 
    private String shiftedAlphabetLower; 
    private String shiftedAlphabetUpper; 
    private int mainKey; 
    public OOCaesarCipher(int key) { 
     alphabetLower = "abcdefghijklmnopqrstuvwxyz"; 
     alphabetUpper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
     shiftedAlphabetLower = alphabetLower.substring(key) + alphabetLower.substring(0,key); 
     shiftedAlphabetUpper = alphabetUpper.substring(key) + alphabetUpper.substring(0,key); 
     mainKey = key; 
    } 
    public String encrypt(String input) { 
     StringBuilder encrypted = new StringBuilder(input); 
     for (int index=0; index < encrypted.length(); index++) { 
      Character currChar = encrypted.charAt(index); 
      int currentIndex = 0; 

      if (Character.isLowerCase(currChar)) { 
       currentIndex = alphabetLower.indexOf(currChar); 
      } 
      else { 
       currentIndex = alphabetUpper.indexOf(currChar); 
      } 

      if (currentIndex != -1 && Character.isLowerCase(currChar)) { 
       char newChar = shiftedAlphabetLower.charAt(currentIndex); 
       encrypted.setCharAt(index, newChar); 
      } 
      else if (currentIndex != -1) { 
       char newChar = shiftedAlphabetUpper.charAt(currentIndex); 
       encrypted.setCharAt(index, newChar); 
      } 
     } 
     return encrypted.toString(); 
    } 
    public String decrypt(String input) { 
     OOCaesarCipher oocc = new OOCaesarCipher(26-mainKey); 
     return oocc.encrypt(input); 
    } 
    } 

ответ

1

Возвращает строку массива следующим образом:

public String[] decrypt(String input) { 

    String[] oocc1And2 = new String[2]; 
    OOCaesarCipher oocc1 = new OOCaesarCipher(26-mainKey1); 
    OOCaesarCipher oocc2 = new OOCaesarCipher(26-mainKey2); 

    oocc1And2[0] = oocc1.encrypt(input); 
    oocc1And2[1] = oocc2.encrypt(input); 
    return oocc1And2; 

} 
+0

Это приводит к ошибке массива 'array dimension missing ' – user5745776

+0

попробуйте эту замену String [] oocc1And2 = new String [2]; – dxpelou

+0

Я отредактировал ответ, попробуйте код сейчас. – dxpelou

0

вопрос с ниже код

return oocc1.encrypt(input); 
return oocc2.encrypt(input); 

Вы не можете иметь какое-либо заявление после return statement в java компилятор не может понять, как работать.

Если вам необходимо вернуть два значения, создать Map добавить значения к нему, а затем вернуться,

или сделать POJO, заданные значения затем возвращаются ...

вам может понадобиться изменить метод ,

Ниже приводится input как String input. попробовать также добавить еще один вход, может быть, для ключей, значения могут прийти как 26-mainKey1 или 26-mainKey2

public String decrypt(String input) { 
     OOCaesarCipher oocc1 = new OOCaesarCipher(26-mainKey1); 
     return oocc1.encrypt(input); 
     } 
+0

Мы не узнали, как использовать 'Map' но в нашем классе. Что такое 'POJO'? – user5745776

+0

@ user5745776 Обычный старый объект Java. Необходимо было описать объект, который не имеет ничего особенного. –

+0

Как вы используете 'POJO'? – user5745776

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