Java与python的用户输入问题

问题描述:

再次理解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作为参数,并将其分配给

一遍吗?

请有人请用pythonic术语向我解释,这里发生了什么,以及它如何以及为什么会与python有很大不同?

任何有创意的建议,将不胜感激。

+1

@nikhil:我想在这里学习新东西。我会赞赏一些解释,说明它为什么没有意义,而不是这种粗鲁的回答。 – 2012-04-19 13:45:44

+2

@Jack_of_All_Trades:这在任何Java引入文本的第一章中都有解释。在提出问题之前显示一些努力。 – Deestan 2012-04-19 13:49:01

你的问题有点乱码,但这是我的答案。在Java中,就像在Python中一样,在调用方法之前,您需要实例化一个类。在Python中,你可以这样做:

myvar = MyClass(name="example") 

在Java中,语法很相似:

in = new Scanner(System.in); 

而且就像在Python中,我们就可以调用它的方法,如:

fahr = in.nextDouble(); 

这与等效的Python代码的外观几乎完全相同。有可能我不了解你的困惑的来源,所以如果这不能让我知道,我很乐意更新的东西。

+0

在上面的代码中扫描仪的含义是什么? – 2012-04-19 14:00:24

+0

'Scanner'是一个从流中读取输入的类(在本例中,是'System.in',相当于Python的'stdin')。这个例子使用'Scanner'类从输入中读取一个double值。这大致相当于C中的'fscanf()'函数。请参阅[本文档](http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html)有关'扫描仪'类的详细信息。 – larsks 2012-04-19 14:02:29

+0

谢谢你的答案。 – 2012-04-19 14:10:16

我不认为你真的了解程序和计算机的工作方式。您可以认为它是Scanner inScanner类型对象的正确大小的内存中名为in的区域创建标签,然后in = new Scanner()实际上在先前保留的内存中的该位置创建该对象。你可以认为它与Python中的in = Nonein = Scanner()大致类似,尽管这并不完全正确。问题在于,由于Python是松散类型的,因此它可以处理幕后的所有簿记,从而允许您使用一行代码完成多个步骤。

+1

这是我能得到的最粗鲁的答案!你是什​​么意思?我发现我习惯于使用的语言有所不同,而我正在努力学习,因此,您认为我不知道“程序和计算机如何工作”。 – 2012-04-19 13:50:09

+0

@Jack_of_All_Trades因为你的问题表明你没有。你是否理解预留内存并向其写入值的过程?当你在Python中创建一个变量时,它或多或少是一个指向实际分配值时定义类型的任意数据段的指针。在Java中,您必须提前声明要在该位置存储的数据类型,以便解释器可以告诉操作系统需要多少空间,因为这是在编译时而不是运行时确定的。 – 2012-04-19 13:55:01

+0

你应该首先考虑到我正在学习Java,并且我习惯了python,我不必担心内存管理。你自己评论答案。 – 2012-04-19 13:57:52

将对象声明看作是隐式赋值None。这在python中是毫无意义的,因为变量没有类型,但是它们的VALUES却这样(这就是为什么声明一个没有赋值的变量没有意义)。在Java中,当你声明一个变量时,你会承诺它将存储哪些类型的子集,并且由于在实现该承诺和实际有价值之间可能存在一些代码,因此它们是分开实现的声明。

+0

有趣......你说我差不多完全一样的东西,但我得到-2,你得到+1 ... – 2012-04-19 13:50:53

+2

-1可能是你的第一句话回答。 – 2012-04-19 13:51:35

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 

这可以缩短为

Scanner input = new Scanner(System.in); 

假设我们在Python中有一个Scanner类,则大致相当于代码

input_obj = None 
input_obj = Scanner() 

Python是动态类型语言,所以你不要不需要声明类型。因此,第一行不起任何作用,它可以也应该被省略,从而导致

input_obj = Scanner()