2

我必须在 Java 中做一个加密程序,它从用户那里获取一个数字和一个字符串(作为实例变量)并将该数字添加到字符串中每个字母的 ASCII 以创建一个新的字符串。例如,如果数字是 2,原始字符串是“ABCXYZ”它应该打印“CDEZAB”这是我到目前为止所得到的:

import java.io.*;

public class Program12 {

   String str;

   public void encodeDecode() throws IOException

   {

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      System.out.println("Input a string");

      str = br.readLine();

      System.out.println("input a number");
      **char a=char.parseChar(br.readLine(System.in));**
      String ustr = str.toUpperCase();
      int l = ustr.length();
      for (int x = 0; x < l; ++x) {
         char t = ustr.charAt(x);
         if (('t' + a) > 90) {
            char c = 90 - 't';
            char p = c - a;
            char d = 65 + p;
            System.out.print(d);
         } else {
            System.out.print('t' + a);
         }
      }
   }
}

但它一直说在将String转换为char时出现错误。我该如何解决?

4

8 回答 8

4

有很多事情要建议,所以我已经根据您的要求完全修改了您的代码,如果您不明白可以问我的任何内容

public class Program12 {

   String str,newStr="";  
   int num;

   public void encodeDecode() throws IOException

   {

     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

          System.out.println("Input a string");

          str = br.readLine();
          str.toUpperCase();
          System.out.println("input a number");

          num = Integer.parseInt(br.readLine());
          char ch;int sum;
          for(int i=0;i<str.length();i++)
          {
              ch=str.charAt(i);
              if((ch+num)>90)
              {
                  sum=((ch+num)%90%26);
                  if(sum>0)
                      ch=(char)(sum+64);
              }
              else
              {
                  ch=(char)(ch+num);
              }
              newStr=newStr+ch;
          }
          System.out.println("entered str : "+str+" num : "+num+" newstr : "+newStr);
   }
}
于 2013-05-22T09:12:03.820 回答
2

您需要将输入存储为字符串,然后转换为 char 数组

String str = br.readLine();
char[] charArray = str.toCharArray();
于 2013-05-22T08:40:06.383 回答
2

获取完整字符串的新功能和更简洁的样式将是

尝试 /catch 块已被省略。您可以调用此方法并以传统方式(使用 String.tocharArray())在给定的返回字符串上读取每个字符,即使您需要读取每个字符。此方法返回完整的字符串。

   public String getValue(){

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        return br.lines().collect(Collectors.joining(System.lineSeparator()));
        }
于 2016-02-10T15:02:01.467 回答
0
public class crypt {

    /**
     * @param args
     */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        System.out.println("enter the string");
        str=br.readLine();
        String ustr=str.toUpperCase();
        System.out.println("upper case string is");
        System.out.println(ustr);
        int l= ustr.length();
        System.out.println("enter the number");
        int n=Integer.parseInt(br.readLine()) ;


        for(int i=0; i<l ;i++)
        {
            char ch = ustr.charAt(i);

            int x= (int)ch;
            int y = x+n;
            if((y)>90)
            {
                int q=((y)%90);
                char h=(char)(64+q);
                System.out.print(h);

            }
            else
                System.out.print((char)y);


        }



    }

}
于 2014-06-13T10:16:28.697 回答
0

而不是做

System.out.println("input a number");
char a=char.parseChar(br.readLine(System.in));

试试这个以获得单个字符

System.out.println("input a number");
String abc=br.readLine(System.in);
char a=abc.charAt(0);
于 2013-05-22T08:44:41.183 回答
0

您不能将 a 转换String为 a char,因为字符串包含多个字符。如果您希望获得字符串的第一个字符,那么您需要使用charAt方法。确保首先检查字符串长度,否则你会得到StringIndexOutOfBoundsException

String str = br.readLine(System.in);
char a = str.length() > 0 ? str.charAt(0) : '\0';
于 2013-05-22T08:45:12.230 回答
0
public static void encodeDecode() throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    System.out.println("Input a string");
    //Get a char array from String input.
    char[] chars = br.readLine().toCharArray();


    System.out.println("input a number");
    //Read increment as String and convert to int
    int increment = Integer.parseInt(br.readLine()  );

    for (char c : chars) {
        System.out.println((char)((c + increment > 90) ?((90 - c)+65):c+increment));
    }
}
于 2013-05-22T08:55:18.297 回答
-1

由于aInteger,将其更改为:

 System.out.println("input a number");
 int a  =  Integer.parseInt(br.readLine());

然后:

 String res = "";//stores the result
      for (int x = 0; x < l; ++x) {
          char t = ustr.charAt(x);
              //check after adding the number, still is a letter
              // 35 is for 'Z'
          if(Character.getNumericValue(t) + a < 36)
              res += (char)(t + a);
          else{
              res += (char)(t + a - 26);
          }
      }
      System.out.println(res);
于 2013-05-22T08:54:44.183 回答