2

ユーザーから数値と文字列 (インスタンス変数として) を取得し、その数値を文字列内の各文字の ASCII に追加して新しい文字列を作成する Java で暗号化プログラムを実行する必要があります。は 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);
         }
      }
   }
}

しかし、文字列から文字への変換に誤りがあると言い続けています。どうすれば修正できますか?

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

完全な文字列を取得する新しい機能的でより簡潔なスタイルは次のようになります。

try /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

するのではなく

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

文字列に複数の文字が含まれているため、 aStringを に変換できません。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 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 に答える