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

文字には同等の数値があります。「基本文字」の場合、このマッピングは ASCII テーブルと呼ばれます: http://www.asciitable.com/

現在、Java では、キャストによってacharを 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;

または、これらすべてを 1 行のコードとして記述できます。

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 に答える
0

数学をすることだけを考えましたか?

letter = Character.toUpperCase((char)System.in.read());
System.out.print((char)('Z' - (letter - 'A'));

また、変換手順を繰り返さないため、1 文字のみで機能します。プログラムは 1 つを読み取り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 の言うとおりです。これは、s に算術演算を使用して、かなり簡単に書くことができますchar。たとえば、 when is 'b' とch -'a' == 1評価されます。truech

もう 1 つ注意してください: findandTurnerは、これらの機能を説明する名前ではありません。やがて、シンプルでポイントのあるネーミングがなければ、面倒になる可能性があります。

于 2013-10-07T00:29:14.967 に答える