2012-04-19 21 views
-1

Javaの理解に問題があります。私が前の質問Hello world in Java versus pythonについて尋ねたとき、私はそれをやめるまでしばらくの間、その言語を当然のものとして受け入れることの提案を受けました。しかし、私はそのアプローチを取ることはできませんし、Javaのいくつかの奇妙なものがPythonに対して困惑しています。JavaとPythonのユーザー入力

ここは、ユーザーからの入力を受け取り、FをPythonで摂氏に変換するプログラムです。

def main(): 
fahr = input (" Enter the temperature in F: ") 
cel = (fahr - 32) * 5.0/9.0 
print " the temperature in C is : " , cel 

これは内部で起こって任意の風変わりなものなしに非常に簡単です。

Javaで同じことを行うに例:私は起こるはずと思った何

import java . util . Scanner ; 

public class TempConv { 
public static void main (String [] args) { 
Double fahr ; 
Double cel ; 
Scanner in ; 

in = new Scanner (System . in); 
System . out . println (" Enter the temperature in F: "); 
fahr = in . nextDouble(); 

cel = (fahr - 32) * 5.0/9.0; 
System . out . println (" The temperature in C is : " + cel); 

System . exit (0); 
} 

} 

されました:スキャナは、ユーザーの入力を取るために、クラス/オブジェクトのJavaクラス/インスタンスだったと

Scanner in 

は、ユーザー入力を行うための新しいオブジェクトを作成しました。私たちがJavaのScannerタイプであると宣言していることが分かります(私が間違っていれば私を修正してください)。

これはPythonの場合は、ユーザーからの入力を取得する新しく作成されたScannerオブジェクトのメソッドを呼び出しただけです。 OMG、これはJavaで何ですか?私たちは、

新しいスキャナ

オブジェクトを作成し、パラメータとしてSystem.inを渡し、それが再び

に割り当てますか?

誰かが私にピョンソニックな言葉で説明してください。何が起こっているのですか、どうやって、それがどうして、なぜそれがずっと違うべきなのですか?

いずれかの創造的な提案は高く評価されます。

+1

@nikhil:私はここで新しいことを学ぼうとしています。このような無礼な反応ではなく、無意味である理由を示唆するちょっとした説明をいただければ幸いです。 –

+2

@Jack_of_All_Trades:これは、これまでに書かれた任意のJava Introduction Textの第1章で説明されています。質問をする前に何らかの努力をしてください。 – Deestan

答えて

2

あなたの質問は少し文字化けしていますが、これは私の答えです。 Javaでは、Pythonの場合と同様に、クラスをインスタンス化してからメソッドを呼び出す必要があります。 Pythonでは、あなたがこれを行うことがあります

in = new Scanner(System.in); 

そして、ちょうどPythonでのように、我々は今のような、その上のメソッドを呼び出すことができます:Javaでは

myvar = MyClass(name="example") 

を、構文は非常に似ている

fahr = in.nextDouble(); 

これは、同等のPythonコードの外観とほぼ同じです。私はあなたの混乱の原因を理解できない可能性があるので、これが私に知らせるのに役立たない場合、私は物事を更新して幸せです。

+0

上記のコードでScannerの意味は何ですか? –

+0

'Scanner'はストリームから入力を読み込むクラスです(この場合、' System.in'はPythonの 'stdin'と同じです)。この例では、 'Scanner'クラスを使用して入力からdouble値を読み取ります。これはC言語の 'fscanf()'関数とほぼ同じです。[このドキュメント](http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html)を参照してください。 'Scanner'クラスの詳細。 – larsks

+0

あなたの答えはありがとうございます。 –

-4

私はあなたが本当にプログラムとコンピュータの仕組みを理解しているとは思いません。Scanner inは、Scannerタイプのオブジェクトの正しいサイズのinという名前のメモリ内の領域のラベルを作成すると考えると、in = new Scanner()は実際にそのオブジェクトを以前に予約されたメモリ内のその場所に作成します。あなたはPythonでin = Nonein = Scanner()とおおよそ類似していると考えることができますが、実際にはそれほど正しいわけではありません。これは、Pythonがゆるやかに型付けされているので、背後にあるすべての簿記を処理するので、コードの1行で実際に複数のステップができるようになります。

+1

これは私が得ることができる最も失礼な答えです!それはどういう意味ですか?私は慣れ親しんでいた言語の違いを見つけています。私は「プログラムとコンピュータの仕組み」がわからないと思うようになっています。 –

+0

@Jack_of_All_Tradesあなたの質問はあなたがしないことを示唆しているからです。メモリを予約し、それに値を書き込むプロセスを理解していますか? Pythonで変数を作成すると、実際に値を代入するときに型が定義されているデータの任意の部分へのポインタになります。 Javaでは、インタプリタが実行時間の代わりにコンパイル時に決定されるため、オペレーティングシステムに必要な領域をOSに通知できるように、事前にその場所に格納されるデータのタイプを宣言する必要があります。 –

+0

あなたはまずJavaを学ぼうとしていると思っていて、私はメモリ管理について心配する必要がないPythonに慣れています。あなたはコメント自体をコメントします。 –

1

オブジェクト宣言は、Noneの暗黙的な割り当てと考えてください。これは、変数が型を持たないので、Pythonでは意味がありませんが、そのVALUESは(変数を宣言して値を代入するのは無意味なのです)。 Javaでは、変数を宣言するときに、そこに格納される型のサブセットについて約束し、その約束をして実際に値を入れていく間に何らかのコードが存在する可能性があるので、それらは別々に実行されますステートメント。

+0

面白い...私はまったく同じことを言っていますが、私は-2を得て、あなたは+1を得る... –

+2

-1あなたの答えの最初の文になるかもしれません。 –

1

Javaはスタティック型言語です。使用する前に、変数の型を宣言する必要があります。

Scanner input; //This declare a variable of type Scanner but not assign anything to it yet 
input = new Scanner(System.in); // This create a new object of Scanner type and assign it to the variable in 

これは、我々はPythonでScannerクラスを持っていると仮定すると

Scanner input = new Scanner(System.in); 

として短縮することができ、およそ-同等のコードはあなたのでドン、

input_obj = None 
input_obj = Scanner() 

Pythonは、動的型付けされた言語ですタイプを宣言する必要はありません。したがって、最初の行は目的を果たさず、省略することもできます。

関連する問題