2014-09-07 6 views
3

Итак, заданный вопрос: изменить символы строки с 3 символами впереди них, поэтому давайте скажем, что строка «AB cd» будет изменена на: «DE fg». Я не очень хорошо, но я программирования старался изо всех сил, и придумать с этим:Неполадка смены символов в строках

import java.util.*; 

public class encrypt{ 

    public static void main(String[] args){ 

     Scanner reader = new Scanner(System.in); 
     System.out.println("Enter a message to encrypt: "); 
     String message = reader.nextLine(); 

     List<Character> Lowercase = Arrays.asList('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'); 

     List<Character> Uppercase = Arrays.asList('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'); 

     for (int i = 0; i < message.length(); i++) { 
      char c = message.charAt(i); 

      if(c == ' '){ 
       continue; 
      } 
      else if (c != ' '){ 
       for (int i = 0; i < Lowercase.size(); i++) { 
        char b = Lowercase.indexOf(i); 

        if(c == b){ 
         message.charAt(i)=Lowercase.indexOf(i+3); 
        } 
       } 
      } 

      for (int i = 0; i < Uppercase.size(); i++) { 
       char j = Uppercase.indexOf(i); 

       if(c == j){ 
        message.charAt(i)=Uppercase.indexOf(i+3); 
       } 
      } 
     } 
    }    
} 

Я получаю ошибки как:

Problem1.java:20: error: variable i is already defined in method main(String[]) for (int i = 0; i < Lowercase.size(); i++) { ^ Problem1.java:21: error: possible loss of precision char b = Lowercase.indexOf(i); ^ required: char found: int Problem1.java:23: error: unexpected type message.charAt(i)=Lowercase.indexOf(i+3); ^ required: variable found: value Problem1.java:27: error: variable i is already defined in method main(String[])

любая помощь будет оценена :) спасибо.

+0

вы должны использовать J или другое имя переменной для внутреннего индекса –

+1

петли Здесь слишком много вопросов ... Я рекомендую удалить код пока вы не получите ошибку * компилятора *, и задайте конкретный вопрос об этом. –

+0

@ChrisMartin мой вопрос в основном, как бы я пошел, например, сравнивая символы из строки ввода пользователя с символом нижнего/верхнего регистра, а затем заменяя пользовательскую строку ввода символом из нижнего/верхнего массива – Finn

ответ

0

Я считаю, что есть простой способ решить проблему, и вы можете найти ответ на свой вопрос в ASCII table enter image description here

Как вы видите, слова имеют некоторое число связанных с ними, как капитал A является 65 и небольшой c является 99, в результате вы можете пройти через число и использовать процессы литья, чтобы получить необходимый символ.

read more casting from string to int

Я думаю, вы должны попробовать это

Код:

 String s = "eh az"; 
     for (int i = 0; i < s.length(); i++) { 
      int a = s.charAt(i); 
      if (a >= 97 && a <= 119) { 
       System.out.print((char) (s.charAt(i) + 3)); 
      } else if (a >= 120 && a <= 122) { 
       a -= 23; 
       System.out.print((char) a); 
      } else if (a == 32) { 
       System.out.print(" "); 
      } 
     } 

выход:

hk dc 
+1

Это хорошо, но используйте таблицу Unicode вместо таблицы ASCII. Символ Java содержит один модуль кода UTF-16, один или два из которых кодируют код Unicode. –

+0

@TomBlodget, что является хорошим моментом, но я не хотел усложнять жизнь для OP cuz, как вы видите, op - это новичок. Иногда проще сделать жизнь проще, чтобы сделать точку и сделать концепцию более понятной для OP, которая является новичком :) –

+0

Но так много может пойти не так, когда программисты считают, что ASCII используется повсюду, когда он используется почти нигде. Я не думаю, что они должны начать с изучения ASCII. –

0

Я предполагаю, что вы пытаетесь выполнить это Цезарь Сифер. Взгляните на этот пост: Java Int & ASCII Question

+0

да, я пытаюсь это сделать, я посмотрю спасибо :) – Finn

0

Это одно решение. Сравните это с вашим текущим кодом, чтобы узнать, как исправить ошибки.

Я также сделал так, чтобы он пересекал фронт массива для букв в конце алфавита. IE: Ввод буквы «Z» приведет к выводу «C».

import java.util.*; 

class encrypt 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     char c,b,j; 

     Scanner reader = new Scanner(System.in); 
     System.out.println("Enter a message to encrypt: "); 
     String message = reader.nextLine(); 

     char[] messageArray = message.toCharArray(); 

     List<Character> Lowercase = Arrays.asList('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'); 

     List<Character> Uppercase = Arrays.asList('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'); 

     for (int i = 0; i < message.length(); i++) { 
      c = messageArray[i]; 
      if (c != ' '){ 
       for (int x = 0; x < Lowercase.size(); x++) { 
        b = (char)(Lowercase.get(x)); 
        if(c == b){ 
         int n = (x+3)%Lowercase.size(); 
         messageArray[i]=Lowercase.get(n); 
        } 
       } 
       for (int y = 0; y < Uppercase.size(); y++) { 
        j = (char)(Uppercase.get(y)); 
        if(c == j){ 
         int m = (y+3)%Lowercase.size(); 
         messageArray[i]=Uppercase.get(m); 
        } 
       } 
      } 
     } 
     System.out.println(messageArray); 
    } 
} 
+0

большое вам спасибо! Я сравниваю это с моим, я пытаюсь понять, что вы сделали по-другому, потому что я действительно хочу понять java. – Finn

+0

Рад помочь. Если у вас есть какие-либо вопросы или вы не понимаете, что означают определенные строки кода, просто дайте мне знать, и я могу помочь объяснить их. – Wellspring

1

Помимо полезной ссылки, представленной с ответом dmcqu314, здесь есть некоторые мысли о вашем коде и возникающих ошибках.

Ошибка в строке 20

for (int i = 0; i < message.length(); i++) { 

Как уже говорилось, вы действительно должны использовать другую переменную, чем «я» для внутренних петель @Jama Jurayevich. Например, используйте «k». Это поможет немного - не так много из-за других ошибок.

Ошибка в строке 21

char b = Lowercase.indexOf(i); 

Lowercase.indexOf (I) будет извлекать (подпись) Int типа. Присвоение этого символьному типу (char b) вызывает приведение типов к чему-то вроде unsigned int (а именно к символу) - таким образом, намек на «возможную потерю точности».

Ошибка в строке 23

message.charAt(i)=Lowercase.indexOf(i+3); 

Здесь вы пытаетесь присвоить целочисленное значение для метода строки. Это невозможно вообще. Строки - это конечные объекты в Java. И нет способа присвоить метод методу. Если вы хотите добавить полукокса в строку, вы можете сделать это следующим образом (пример):

String newString = new String(); 
... 
newString = newString + 'a' 

Эллипс для других кодировок вашего выбора.

Надеюсь, что эти подсказки помогут вам немного побороть некоторые недоумения.

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