Java 将字母转换为字母表中计数方向相反的对应字母
我在自学Java,而且我刚开始学习基础知识。使用下面的代码,我试图将字母转换为字母表中计数方向相反的对应字母(即a到Z或Z到a等)。它适用于单个字母,但不适用于一系列字母。我如何使它与多个字母一起工作?如果你能用最简单的方法,那就好了,因为我对Java还很陌生。我不(知道如何)导出任何内置类等 多谢各位Java 将字母转换为字母表中计数方向相反的对应字母,java,Java,我在自学Java,而且我刚开始学习基础知识。使用下面的代码,我试图将字母转换为字母表中计数方向相反的对应字母(即a到Z或Z到a等)。它适用于单个字母,但不适用于一系列字母。我如何使它与多个字母一起工作?如果你能用最简单的方法,那就好了,因为我对Java还很陌生。我不(知道如何)导出任何内置类等 多谢各位 class Turner{ int find(int fin, int mi,int ma,char ch[]){ int mid = (ma+mi)/2;
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)]);
}
}
类特纳{
int find(int fin、int mi、int ma、char ch[]){
int-mid=(ma+mi)/2;
int x;
如果(ch[mid]==fin)
中途返回;
如果(fin你考虑过只做一些数学吗
letter = Character.toUpperCase((char)System.in.read());
System.out.print((char)('Z' - (letter - 'A'));
它只对一个字母有效,因为您没有重复转换过程。该程序读取一个字符,打印其对立面,然后终止
您所要做的就是将读取和打印的代码放入某种循环中,这样每次它运行时都会立即等待下一个字母
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')));
}
while(true){
字母=Character.toUpperCase((char)System.in.read());
如果((字母>'Z')| |(字母<'A'))
break;//用户输入了无效符号,终止了程序
系统输出打印((字符)('Z'-(字母-'A'));
}
如果您的函数(在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)]);
}
哈夫纳德是对的,这可以写得简单得多,使用char
s上的算术。例如ch-'a'==1
在ch
为'b'时计算为true
另一个注意事项是:find
和Turner
对于这些东西的作用不是很好的描述性名称。不久,如果没有简单且切中要害的命名,它可能会变得混乱。字符具有等效的数值。对于“基本字符”,这种映射称为ASCII表:
现在,在java中,您可以通过强制转换将char
转换为int
因为有一个数值与“a”相关,另一个与“z”相关,所以您可以使用一些简单的数学来解决您的问题
见:
或者,您可以将所有这些作为一行代码编写:
char resultCharacter = (char) ((int) 'z' - ((int) characterToConvert - (int) 'a'));
最后,如果您愿意硬编码一些ASCII值:
char resultCharacter = (char) (122 - ((int) characterToConvert - 97));
注意,这是小写字母。对于CAPS,使用“A”(ASCII 65),“Z”(ASCII 90)。
我确实写了一些东西(比如‘A’+ 26(字母-A)),但是它没有发生:)它应该是25。不过,出于好奇,你尝试过你写的代码吗?你会意识到它有点错误(1位数)。。写一段代码而不运行它,但知道它可以工作99.99%,这太酷了。我不知道我可以使用这样的while循环。谢谢大家。这并不是说我应该提供编译验证答案或任何东西。但更好的是,只需将其默认为'Z'
,不确定我为什么没有想到。你搞错了。正如我是计算机/编程领域的新手,我想了解你们是如何编写代码的。事实上,这不是编译证明,这样我就可以做些事情,这很好。我想我实际上是在恭维:)不管怎样,你介意给我一些关于如何提高/发展我的编程技能的建议吗?还有什么可以继续的吗你不是在私下吗?谢谢。使用“System.out.println”(“输入一封信(要退出的空格):”)循环外使它变得更好,因为它每次通过循环时都写相同的东西。此外,需要输入字母和空格,否则它将循环不必要的长。感谢您向我展示另一种使用while循环的方法,并对我的代码提供建设性的反馈。我将尝试改进我的命名。
char resultCharacter = (char) (122 - ((int) characterToConvert - 97));