Java 向字符添加或从字符中减去大数字
对于第1种情况,将2添加到“a”中会得到“c” 我如何编写一个程序,使“z”加2得到“b”作为输出,而“a”减去3得到“x”作为输出 换句话说,我只想要字母字符作为输出。无论您在字符上加上或减去多大的数字,我总是希望输出介于a和z之间(包括a和z)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
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。要处理两种情况,您可能还需要:
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);
}
要处理两种情况,您可能还需要:
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,如果超出该范围,则报告输入错误。