1

我在使用 ACM 的 Java 中使用凯撒密码有问题。这是我的代码:

import acm.program.*;

public class Ceasar extends ConsoleProgram{

  public void run() {
    println("This program encodes a
    message using a Caesar cipher.");

    int shifter=readInt("Enter the number of character positions to shift: ");
    String msg=readLine("Enter a message :");
    String Solution=encodeCaesarCipher(msg,shifter);

    println("Encoded message: "+Solution);
  }

  private String encodeCaesarCipher(String str,int shift){
    String result="";

    for (int i=0;i<str.length();i++){
      char helper=str.charAt(i);
      helper=(helper+shift);

      if (helper>'Z'||helper>'z') helper =(helper-26);
      if (helper<'A'||helper<'a') helper=(helper+26);

      result= result+helper;
    }

    return result;
  }
}

当我编译我有这些错误:

Ceasar.java:21: error: possible loss of precision
  helper=helper+shift;
                ^
  required: char
  found: int

Ceasar.java:22: error: possible loss of precision
  if (helper>'Z'||helper>'z') helper =helper-26;
                                             ^
  required: char
  found: int

Ceasar.java:23: error: possible loss of precision
  if (helper<'A'||helper<'a') helper=helper+26;
                                            ^
  required: char
  found: int
3 errors
4

2 回答 2

3

在没有明确表示您同意可能的精度损失(上溢/下溢)的情况下,您不能在 Java 中将 an 添加int到 a中。向与 a 一起使用的每个地方char添加(char)演员表。intchar

于 2013-12-29T19:46:30.080 回答
1

这是您的代码的固定版本。
将其与您的版本进行比较,以确保
您了解更改。

    public static void main(String[] args){
        String s = encodeCaesarCipher("abc", 5);
        System.out.println(s);
        s = encodeCaesarCipher("abc", 2);
        System.out.println(s);
        s = encodeCaesarCipher("abc", 1);
        System.out.println(s);
    }

    private static String encodeCaesarCipher(String str,int shift){
         String result="";
         for (int i=0;i<str.length();i++){
             int helper=str.charAt(i);
             helper=(helper+shift);
             if (helper>'Z'||helper>'z') helper =(helper-26);
             if (helper<'A'||helper<'a') helper=(helper+26);
                result= result+ (char)helper;
         }
         return result;
     }

输出:

fgh
cde
bcd
于 2013-12-29T19:47:49.827 回答