无法更改字符串中的字符

时间:2014-09-07 23:02:14

标签: java string loops for-loop

所以问的问题是:要改变字符串前面有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[])

任何帮助将不胜感激:)谢谢。

4 个答案:

答案 0 :(得分:1)

除了dmcqu314提供的有用链接之外,还有一些关于代码和发生错误的想法。

第20行出错

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

正如@Jama Jurayevich所说,你真的应该使用另一个变量而不是&#39; i&#39;对于内环。使用&#39;&#39;例如。这会有所帮助 - 因为其他错误而不是很多。

第21行出错

char b = Lowercase.indexOf(i);

Lowercase.indexOf(i)将检索(签名)int类型。将其赋值为char类型(char b)会引发类型转换为类似unsigned int(即char)的类型 - 因此提示&#34;可能会丢失精度&#34;。

第23行出错

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

在这里,您尝试为字符串方法分配一个int值。这根本不可能。字符串是Java中的最终对象。并且无法为方法分配内容。如果你想将一个字符串附加到字符串,你可以这样做(例子):

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

椭圆用于您选择的其他编码。

希望这些提示可以帮助你解决一些困惑。

答案 1 :(得分:0)

我猜你正在尝试完成的是凯撒赛克。看看这篇文章: Java Int & ASCII Question

答案 2 :(得分:0)

这是一个解决方案。将其与您当前的代码进行比较,看看如何纠正错误。

我也这样做了它会循环到数组的前面,用于字母表末尾的字母。 IE:输入字母&#39; Z&#39;将输出&#39; C&#39;。

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);
    }
}

答案 3 :(得分:0)

我相信有一种更简单的方法可以解决您的问题,您可以在ASCII table找到答案 enter image description here

如你所见,单词中有一些与他们相关的数字,如A 65而小c99,因此,您可以通过编号并使用转换过程来获得你想要的字符。

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