2017-10-25 75 views
1
public class MyClass 
{ 
    public static void main(String args[]) 
    { 
     String a = "(4 + 4i)"; 
     String b = "(2 + 3i)"; 
     int g = 1; 
     int c = a.charAt(g); // sets c to 52 
     System.out.println(c); // prints 52 
     System.out.println((double) a.charAt(g)); // prints 52.0 
     System.out.println(a.charAt(g)); // prints 4 
     System.out.println(2 * a.charAt(g)); // prints 104 
    } 
} 

文字列に "i"が含まれている虚数を乗算するコードを作成しようとしていました。だから私は最初に取ってintとdoubleに変換すると思った。これは私を困惑させた52を与えました。しかし、私がコンソールに直接印刷したとき、それは機能しましたが、二重のものがなければ。他の場所で使う必要があるので、これは役に立たない。ではここで何が起こっているのですか?文字列の一部をintとdoubleに解析し、解析を使わずに文字列内の数値を操作する方法がありますか?そして、虚数、すなわち「e^pi * i = 1」を扱うことができる方法はありますか?charAtは、印刷されるデータ型によって印刷が異なるのはなぜですか?

+1

あなたが 'char'sを扱う場合、あなたは[ASCII-Codes](https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange)と文字 '' 4 ''にはASCIIコード「52」があります。 'char'をint型に変換すると(' int c = a.charAt(...) ')、ASCIIコードが数字を表しますが、ASCIIコードが得られます。 ( 'System.out.println(a.charAt(...))'を直接印刷すると、Javaは実際の文字のASCIIコードを翻訳するのに十分スマートです。(備考:ASCII部分は実際にはうそです、Javaの文字はUTF-16です) – Turing85

+0

52は文字 '4'の文字コードです –

+0

複素数については、https://stackoverflow.com/questions/2997053を参照してください。/does-java-have-a-complex-numbers-for-complex-numbers – Alex

答えて

2

文字列は、文字と呼ばれる文字、句読点、数字などの一連の記号です。各文字は数字に関連付けられています。これを行う一般的な方法の1つは、ASCII文字と呼ばれるものです。この場合、文字'4'は数字52で表されています。これを考慮して

は、のは、あなたのコードのいくつかを見てみましょう:

int c = a.charAt(g); 

この行は、黙ってその数値に文字を変換します。 「数値」とは、数字自体の値ではなく、文字を表す数字を意味します。この場合、文字'4'の数値は52です。

System.out.println(a.charAt(g)); // prints 4 

これは文字'4'、ないint4を出力します。数字文字とその整数値の違いを知ることは非常に重要です。

算術演算を実行できるように数値4を取得するには、Stringを解析する必要があります。関数Integer.valueOf()はこの点で多くの助けになります。

また、クラスとオブジェクトについても学習する必要があります。たとえば、Complexクラスを作成すると、複素数を独自の操作で1つのエンティティとして使用できるようになります。

+0

答えは正解ですが、私はOPの混乱の主な点はJavaのキャスト動作だと思います。特に、 'char'から' int ' '。あなたはこのトピックをあなたの答えにもっと冗長に議論したいでしょうか? – Turing85

+1

Javaでは、すべての文字がUnicodeであることに注意してください。 – chrylis

+0

@chrylisええ、あなたはOP以上のことを混乱させたいのですか?彼はすでにですか?説明のため、ASCIIで十分です:) – Turing85

0

'4'のASCII値は、あなたがそのint値にcharを変換したい場合、あなたはそれが予想される範囲内にあることを確認してから解析する必要がある52

System.out.println("(4 + 4i)".charAt(1) == '4'); // '4' == '4' 
System.out.println((int) '4'); // <-- 52 

あるので、あなたが52を得ますそれ。それは、int(またはchar、またはString、またはdoubleなどを書くためにオーバーロードされたメソッドを提供するもので、System#outPrintStreamで、最終的には、

char c = '4'; 
if (c >= '0' && c <= '9') { 
    System.out.println((int) (c - '0')); 
    System.out.println(Character.digit(c, 10)); 
} 

好き - あなたは値から'0'を引く、またはCharacter.digitを使用することができます)。

関連する問題