Java 向字符添加或从字符中减去大数字

Java 向字符添加或从字符中减去大数字,java,Java,对于第1种情况,将2添加到“a”中会得到“c” 我如何编写一个程序,使“z”加2得到“b”作为输出,而“a”减去3得到“x”作为输出 换句话说,我只想要字母字符作为输出。无论您在字符上加上或减去多大的数字,我总是希望输出介于a和z之间(包括a和z) case #1 public void addNumberToCharacter{ char character = 'a' + 2; System.out.println(character); // 'c' } case #2

对于第1种情况,将2添加到“a”中会得到“c”

我如何编写一个程序,使“z”加2得到“b”作为输出,而“a”减去3得到“x”作为输出

换句话说,我只想要字母字符作为输出。无论您在字符上加上或减去多大的数字,我总是希望输出介于a和z之间(包括a和z)

case #1
public void addNumberToCharacter{
    char character = 'a' + 2;
    System.out.println(character); // 'c'
}

case #2
public void addNumberToCharacter{
    char character = 'z' + 2;
    System.out.println(character); // 'b'
}

case #3
public void addNumberToCharacter{
    char character = 'a' - 3;
    System.out.println(character); // 'x'
}

在进行加法或减法运算后,请使用以下命令进行更正:

character = (character + 26 - 'a')%26 + 'a';

Java的x%y运算符给出x除以y的整数的余数。减去“a”给出从小写字母开始的偏移量,然后加26保证正和,前提是加上的偏移量不小于-26或减去的偏移量不大于+26。

在加或减后,用以下命令更正:

character = (character + 26 - 'a')%26 + 'a';

Java的x%y运算符给出x除以y的整数的余数。减去“a”将给出从小写字母开始的偏移量,然后再加上26将保证一个正和,前提是添加的偏移量不小于-26或减去的偏移量不大于+26。

要处理两种情况,您可能还需要:

  • 大小写
  • 绝对值大于26的加减数 以下是您可以参考的方法:

    private static void addNumToChar(int a, char c0) {
        char c = 'a';
        if(Character.isUpperCase(c0)) {
            c = 'A';
        }
        while (a < 0) a += 26;
        char c1 = (char) (c + (c0 - c + a) % 26);
        System.out.println(c1);
    }
    

    要处理两种情况,您可能还需要:

  • 大小写
  • 绝对值大于26的加减数 以下是您可以参考的方法:

    private static void addNumToChar(int a, char c0) {
        char c = 'a';
        if(Character.isUpperCase(c0)) {
            c = 'A';
        }
        while (a < 0) a += 26;
        char c1 = (char) (c + (c0 - c + a) % 26);
        System.out.println(c1);
    }
    
    public char number(int num,char c){/--num=29,char='d'
    int n=c-96;//n=4
    n=n+(数值%26);//n=4+3=7
    如果(n>26){return(char)(n-26);}//不跟随
    else如果(n<0){return(char)(n+26);}//不跟随
    else{return(char)(n);}//返回g
    } 
    
    你可以试试这个方法。它可以处理正数和负数。

    公共字符数(int-num,char-c){/--num=29,char='d'
    int n=c-96;//n=4
    n=n+(数值%26);//n=4+3=7
    如果(n>26){return(char)(n-26);}//不跟随
    else如果(n<0){return(char)(n+26);}//不跟随
    else{return(char)(n);}//返回g
    } 
    
    你可以试试这个方法。它可以处理正数和负数。

    使用这个:-

    public static void main(String[] args) {
        char c= 'a' - 1;
        if(!(c>=97 && c<=122)) {
            if(c>=123)
                c= (char) (c-26);
            else
                c= (char) (c+26);
        }
        System.out.println(c);
    }
    
    publicstaticvoidmain(字符串[]args){
    字符c='a'-1;
    如果(!(c>=97&&c=123)
    c=(字符)(c-26);
    其他的
    c=(字符)(c+26);
    }
    系统输出打印ln(c);
    }
    
    使用那个:-

    public static void main(String[] args) {
        char c= 'a' - 1;
        if(!(c>=97 && c<=122)) {
            if(c>=123)
                c= (char) (c-26);
            else
                c= (char) (c+26);
        }
        System.out.println(c);
    }
    
    publicstaticvoidmain(字符串[]args){
    字符c='a'-1;
    如果(!(c>=97&&c=123)
    c=(字符)(c-26);
    其他的
    c=(字符)(c+26);
    }
    系统输出打印ln(c);
    }
    
    只需将你的加法数修改为26模运算符
    %
    是你的朋友。你能提供一个案例3的代码片段吗?@Kayaman向上投票,但%实际上是一个余数运算符。-3和+2是全等的,模5,但-3%5不等于2%5。@MikeHousky确实如此。只需将你的加法数修改为26模运算符
    %
    是你的朋友。你能为案例#3提供一个代码片段吗?@Kayaman向上投票,但%实际上是一个余数运算符。-3和+2是全等的,模5,但-3%5不等于2%5。@MikeHousky确实如此。addNumToChar(3,'c')呢?这个函数没有给出“f”很抱歉没有测试更多的案例,我只是更新了解决方案。谢谢你指出我提出的问题,伙计~~我的荣幸addNumToChar(3,“c”)呢?这个函数没有给出“f”,很抱歉没有测试更多的情况,我只是更新了解决方案。感谢你指出我所遇到的问题,伙计~~我的快乐如果我想添加小于-26的偏移量或减去大于+26的偏移量呢?@user7755336然后在上面的更正中添加26的更大倍数,或者添加/减去
    偏移量%26
    ,减少偏移量的范围为-25..+25,但仍然正确(模26)。或者您可以使用
    ((ch-'a')%26+26)%26
    。但是,如果这是一个旋转密码,您可能应该将前进方向的移位限制为1..25,如果超出该范围,则报告输入错误。如果我要添加小于-26的偏移量或减去大于+26的偏移量,该怎么办?@user7755336然后在上述更正中添加26的更大倍数,或添加/减去
    偏移量%26
    ,将偏移范围减小到-25..+25,但仍然正确(模26)。或者您可以使用
    ((ch-“a”)%26+26)%26
    。但是,如果这是旋转密码,您可能应该将前进方向的偏移限制为1..25,如果超出该范围,则报告输入错误。