0

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

3 回答 3

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')));
}
于 2013-10-07T00:24:37.057 回答
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 是对的,这可以写得更简单,用chars 上的算术。例如ch -'a' == 1评估true何时ch是'b'。

另一个注意事项:find并且Turner对于这些事情的作用并不是非常具有描述性的名称。不久之后,如果没有简单而中肯的命名,它可能会变得一团糟。

于 2013-10-07T00:29:14.967 回答
0

一个字符有一个等效的数值。对于“基本字符”,这种映射称为 ASCII 表:http ://www.asciitable.com/

现在,在 java 中,您可以通过强制转换将 a 转换char为 an 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)。

于 2013-10-07T01:49:53.133 回答