2011-10-26 18 views
0

ユーザーが入力する文字グレードに番号を割り当てようとしています。ユーザーはA、B、Cなどの文字を入力し、入力した値に基づいて整数を格納します。ユーザー入力と相関する配列値の解析

私はこれを行う最も簡単な方法のような、アレイのセットアップだった考え出し:私がする必要があるとき、私は4を使用するので、

char[] grade = char[] grade = {'A','B','C','D','F'}; 
grade[0] = 4; 
grade[1] = 3; 
// ... as so on 

そのグレードのため、いつでもユーザー入力「A」。

私は入力(JOptionPane)を読み、入力した文字をそれに割り当てた対応する値に読み込む方法を見つけようとしています。配列に基づいて文字入力を解析するにはどうすればよいですか?

答えて

0

文字をintにキャストする方が簡単かもしれません。 charは基本的にintの値を持ちます。これを行う:

int i = (char)'A'; 

が、それはあなたがintに文字を唱えられる97になり、下ケースaのために65を得られますし、境界チェックして、いくつかの算術演算を行うには、その値を使用します。シーケンシャル文字はシーケンシャルな整数を生成します。これは、JVM上で実行しているため、異なるプラットフォームのキャラクターセットオーダーを考慮する必要がないので安全です。

それとは別に、あなたが許可され、入力が制限されている方法を見て、マップがあまりにも仕事ができる:

Map<Character, Integer> grades = new HashMap<Character, Integer>(); 
grades.put('A', 4); //optionally also: grades.put('a' 4); 
... 

タイプのparamsとオートボクシングとアンボクシングは、これらの日このロットより便利になります。

+0

私は基本的に、ユーザーがどのような成績を取ったかを尋ねて、その成績に基づいて、この例ではクラスに対して受け取ったクレジットの量として割り当てられた番号を使用します。 だから、彼らはAを持っていると入力すると、彼らはそのクラスの4クレジット時間を受け取りました。 – user1015523

+0

私たちはそれを集めましたが、あなたの質問が明確であるため正確な文脈は重要ではありません。私とあなたの未知のアプローチの両方が、あなたが望むことをするでしょう。 –

1

私は私はあなたが正しいかどうかを理解し、わからない:

int grade (char input) 
{ 
    return 5 - (input - 'A'); 
} 

は、グラフと考えてください。コンピュータのエンコーディング、AsciiまたはUTF8では、文字A〜Fは連続してエンコードされますが、Aは最低でも0または1ではなく、65などです。

5 |    * 
    4 |     * 
    3 |     * 
    2 |      * 
    1 |      * 
    0 +-- ... ------------------*-----> 
        A B C D E F 
        65 6 7 8 9 70 

このグラフを描くと、私はあなたがフォームDからFにジャンプしたことを言いました - それは意図的ですか?そうでない場合:

入力から 'A'を差し引くと、 'A'は5 - 0、 'B'は5 - 1となります。 'A'の数を調べたくないので、文字で算術演算を行うことができるので、Aを直接使用します。

我々は、同様に線形方程式の標準形は、nがy軸を介して切断され、Y = MX + N、(70で

return 70 - input; 

又は

return 'F' - input; 

を書くことができ)、そしてm = -1、勾配、我々の場合は負である。

+0

短くて甘い。 –

+0

これは素晴らしいですが、「A」以上のものをどのように割り当てるのですか? – user1015523

+0

必要ありません。このメソッドを使用する配列は必要ありません。何が起こるかは、算術によってcharがintにキャストされ、入力から差し引くことができるということです。基本的には、入力とAの「差」を計算します.Aの場合は0です.Bの場合は1です.Cの場合は2です。次に、これは4から減算されます。つまり、Aは最終的に4を、Bは3を、Cは2を返します。これを安全に使用するには、入力を確認してZや何かを供給しないようにしてください。 –

関連する問題