将字母转换为字母表中相反计数方向上的相应字母

时间:2013-10-07 00:19:30

标签: java

我正在自学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)]);
    }
}

3 个答案:

答案 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

另一个注意事项:findTurner对于这些事情的作用并不是非常具有描述性的名称。不久之后,如果没有简单的命名就会变得凌乱。

答案 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)。