Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字母转换为字母表中计数方向相反的对应字母_Java - Fatal编程技术网

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;

我在自学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)]);
    }
}
类特纳{
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));