0

自分の名前の各単語に索引を付け、それをすべて足し合わせて秘密の番号を作ったときにゲームをプレイしたことを覚えていますか? のようaayになります1+1+25=27

Javaでさまざまな方法で同じことを試みましたが、失敗しました。最初にスクリプトを共有してから、私が試したことをすべて伝えましょう。

class test{
    public static void main(String args[]){
        int c = 3;
            String s = "c";
        ///now this is what all i tried:

        int value1 = (int)(s);
        ///i tried a cast, but that failed.

        String d = "4";
        int value2 = Integer.parseInt(d);
        ///when i try this, it correctly converts the string to an integer.

        Integer.parseInt(s);
        ///but when i try the above, it fails to do the same.
    }
}

このコードでは、2 つの異なる方法を試していますが、どちらも同様の方法で機能していますが、正確ではありません。

問題は、c が整数値を持つ変数であることを再編成できなかったことです。

それで、それを行うためのショートカットはありますか?また、現在、文字列の長さは 1 桁のみです。ユーザーが名前を入力したら、for ループを使用してすべての文字を完全にループします。

ショートカットがない場合、私に残された唯一のオプションは、次のような if ステートメントを作成することです。

if(letter=a;){
    value=1;
} 

それともそのようなものですか?

助けてくれてありがとう!

4

2 に答える 2

4

String を直接整数に変換することはできません。一度に 1 文字ずつ取り、char の値を減算してから 1 を加算する必要があります'a'

public static void main(String[] a) {
    String s = "test";
    for (char c : s.toLowerCase().toCharArray()){
        System.out.println(charToInt(c));
    }
}
private static int charToInt(char c){
    return c - 'a' + 1;
}
于 2012-08-15T07:15:29.910 に答える
1

Java では、他のほとんどの C-eqsue 言語と同様charに Number 型です。

char: char データ型は、単一の 16 ビット Unicode 文字です。最小値は '\u0000' (または 0) で、最大値は '\uffff' (または 65,535 を含む) です。

アルファベットのみ

したがって、各文字を同等の文字に変換するだけでchar、その ASCII/Unicode 値が得られます。ASCII は Unicode を介して正しい場所にマップされるため、ここでは Unicode には触れません。

// this will give you a Zero based int of the 
// UPPPERCASE alphabet which starts at `65` and
// ends at `90`. 
// See where the lowercases starts and ends?

char c = "My Name".charAt(0) - 65; 
// c = 'M' in this case which is 77 - 65 = 12

ASCII コードは簡単に変換できます。

アスキーテーブル
(出典: asciitable.com )

文字の場合、 a のUPPERCASEすべての をループしてコードを取得し、減算してベース値を取得するだけです。他の文字を除外して同様に処理するのは少し複雑になりますが、表からアイデアを得ることができます。charString650lowercase

印刷可能な文字

「印刷可能な」文字が から始まり32、実行されることに注意してください。126これは通常、単に実行することであり、すべての「印刷可能な」文字をゼロベースに変換する32代わりに減算するだけです。65

以下は、すべての「印刷可能な」文字を印刷します。

public class Main
{
    public static void main(final String[] args)
    {
        for (char i = 32; i <= 126; i++)
        {
            System.out.println(new Character(i));
        }
    }
}

解決

これは、可能なすべての*「印刷可能な」文字の秘密コードを作成する完全なソリューションです。

public class Main
{
    public static void main(final String[] args)
    {
        int hash = 0;
        final String s = args[0];
        for (int c = 0; c < s.length(); c++)
        {
            hash = hash + s.charAt(c) - 32;
        }
        System.out.printf("Secret code for %s is %d", s, hash);
    }
}

私の名前の結果は

Secret code for Jarrod is 418
于 2012-08-15T07:15:10.320 に答える