我正在自学Java,我一开始就学习基础知识。在下面的代码中,我试图将字母转换为字母表中相反计数方向上的相应字母(即A到Z或Z到A等)。它适用于单个字母,但不适用于一系列字母。如何使用多个字母使其工作?如果你能用最简单的方式,那就好了,因为我是Java的新手。我不(知道如何)导出任何内置类等。
谢谢。
class Turner{
int find(int fin, int mi,int ma,char ch[]){
int mid = (ma+mi)/2;
int x;
if(ch[mid]==fin)
return mid;
else if(fin<ch[mid])
return(find(fin, mi,mid-1,ch));
else
return x = find(fin,(mid+1),ma,ch);
}
}
class Turn {
public static void main(String args[]) throws java.io.IOException
{
Turner try1 = new Turner();
char arra[] = new char[26];
char arrb[] = new char[26];
int min = 0;
int max = arra.length;
char a = 'A';
char b = 'Z';
int i;
char letter;
for(i=0;i<26;i++)
{
arra[i]=a;
a++;
arrb[i]=b;
b--;
}
System.out.println("Enter a letter: ");
letter = (char)System.in.read();
System.out.print(arrb[try1.find(letter,min,max,arra)]);
}
}
答案 0 :(得分:0)
你考虑过做一些数学吗?
letter = Character.toUpperCase((char)System.in.read());
System.out.print((char)('Z' - (letter - 'A'));
它只适用于一个字母,因为您没有重复转换过程。该程序读取一个char
,打印其相反的然后终止。
您所要做的就是将读取和打印代码放在某种循环中,因此每次运行它都会立即等待下一个字母。
while (true) {
letter = Character.toUpperCase((char)System.in.read());
if ((letter > 'Z') || (letter < 'A'))
break; // user inputted an invalid symbol, terminating the program
System.out.print((char)('Z' - (letter - 'A')));
}
答案 1 :(得分:0)
如果您的函数(它们在java中称为方法)有效,那么很好。只需将其置于while
循环中,或在需要时以其他方式调用它。
boolean done = false;
while(!done){
System.out.println("Enter a letter (space to quit): ");
letter = (char)System.in.read();
if(letter == ' ') done = true;
else System.out.print(arrb[try1.find(letter,min,max,arra)]);
}
而Havenard是对的,这可以通过算术char
来更简单地写出来。例如,当ch -'a' == 1
为'b'时,true
评估为ch
。
另一个注意事项:find
和Turner
对于这些事情的作用并不是非常具有描述性的名称。不久之后,如果没有简单的命名就会变得凌乱。
答案 2 :(得分:0)
字符具有等效的数值。对于“基本字符”,此映射称为ASCII表:http://www.asciitable.com/
现在,在java中,您可以通过强制转换将char
转换为int
。示例:int nValue=(int) 'a'
。
由于有一个与'a'相关的数值和另一个与'z'相关的数值,你可以使用一些简单的数学来解决你的问题。
请参阅:
int aNumericalValue = (int) 'a';
int zNumericalValue = (int) 'z';
char characterToConvert = ...;
int characterToConvertAsNumericalValue = (int) characterToConvert;
int resultCharacterAsNumericalValue = zNumericalValue - (characterToConvertAsNumericalValue - aNumericalValue);
char resultCharacter = (char) resultCharacterAsNumericalValue;
或者,你可以把所有这些写成一行代码:
char resultCharacter = (char) ((int) 'z' - ((int) characterToConvert - (int) 'a'));
最后,如果您愿意硬编码某些ASCII值:
char resultCharacter = (char) (122 - ((int) characterToConvert - 97));
请注意,这是针对小写字母的。对于大写字母,请使用“A”(ascii 65),“Z”(ascii 90)。