我正在尝试提出一个接受字符和数字的函数。该数字是角色应“旋转”的次数。接受的ASCII码是32到126。
rotate的示例=如果字符“A”旋转两次,它将以字符“C”结束。如果“A”旋转三次,它最终会变成字母“D”。如果你看一下ASCII表:
http://www.jimprice.com/ascii-0-127.gif
鉴于我的ASCII值限制为32到126 ... ascii值065旋转将为ascii值067.ascii值124旋转5次将ascii值34。
例如:
在java中完成此操作的最佳方法是什么(如果你想以相反的方式旋转,它是否可以支持旋转距离的负数而不是正数)?
答案 0 :(得分:1)
尝试类似:
static char rotate(char c, int distance) {
assert 32 <= c && c < 127;
if (distance < 0) distance = distance % (127 - 32) + 127 - 32;
return (char) ((c + distance - 32) % (127 - 32) + 32);
}
编辑:添加if (distance
...行以支持负距离。
答案 1 :(得分:0)
这样做
public static char numToChar(int num,int rotate){
int result = num+rotate;
if(result>126){
result =31+(result-126);
}
return (char)result;
}
System.out.println(numToChar(33,2));
System.out.println(numToChar(125,3));
<强>输出强>
#
!
答案 2 :(得分:0)
您可以使用此方法
public static char rotateChar(char in, int shift) {
/* cast char to int */
int v = (int) in;
/* to cover wrap-around */
v += (shift % 95);
/* 32 - 126 = -95 */
return (char) ((v > 126) ? v - 95 : v);
}
public static void main(String[] args) {
System.out.printf("! + 2 = %s\n",
String.valueOf(rotateChar('!', 2)));
System.out.printf("} + 3 = %s\n",
String.valueOf(rotateChar('}', 3)));
System.out.printf("b - 1 = %s\n",
String.valueOf(rotateChar('b', -1)));
}
! + 2 = #
} + 3 = !
b - 1 = a
答案 3 :(得分:0)
试试这个。
public static void main(String[] args) {
String ascii;
String rotate;
Scanner in = new Scanner(System.in);
System.out.println("Enter ASCII Character");
ascii = in.nextLine();
System.out.println("Enter Rotate value");
rotate = in.nextLine();
int output=(Integer.parseInt(ascii)+Integer.parseInt(rotate))% 126;
if(output<32) output=output+32;
System.out.println("output="+output);
System.out.println(Character.toString ((char) output));
}