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有很大不同?
任何有创意的建议,将不胜感激。
你的问题有点乱码,但这是我的答案。在Java中,就像在Python中一样,在调用方法之前,您需要实例化一个类。在Python中,你可以这样做:
myvar = MyClass(name="example")
在Java中,语法很相似:
in = new Scanner(System.in);
而且就像在Python中,我们就可以调用它的方法,如:
fahr = in.nextDouble();
这与等效的Python代码的外观几乎完全相同。有可能我不了解你的困惑的来源,所以如果这不能让我知道,我很乐意更新的东西。
在上面的代码中扫描仪的含义是什么? – 2012-04-19 14:00:24
'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
谢谢你的答案。 – 2012-04-19 14:10:16
我不认为你真的了解程序和计算机的工作方式。您可以认为它是Scanner in
为Scanner
类型对象的正确大小的内存中名为in
的区域创建标签,然后in = new Scanner()
实际上在先前保留的内存中的该位置创建该对象。你可以认为它与Python中的in = None
in = Scanner()
大致类似,尽管这并不完全正确。问题在于,由于Python是松散类型的,因此它可以处理幕后的所有簿记,从而允许您使用一行代码完成多个步骤。
这是我能得到的最粗鲁的答案!你是什么意思?我发现我习惯于使用的语言有所不同,而我正在努力学习,因此,您认为我不知道“程序和计算机如何工作”。 – 2012-04-19 13:50:09
@Jack_of_All_Trades因为你的问题表明你没有。你是否理解预留内存并向其写入值的过程?当你在Python中创建一个变量时,它或多或少是一个指向实际分配值时定义类型的任意数据段的指针。在Java中,您必须提前声明要在该位置存储的数据类型,以便解释器可以告诉操作系统需要多少空间,因为这是在编译时而不是运行时确定的。 – 2012-04-19 13:55:01
你应该首先考虑到我正在学习Java,并且我习惯了python,我不必担心内存管理。你自己评论答案。 – 2012-04-19 13:57:52
将对象声明看作是隐式赋值None。这在python中是毫无意义的,因为变量没有类型,但是它们的VALUES却这样(这就是为什么声明一个没有赋值的变量没有意义)。在Java中,当你声明一个变量时,你会承诺它将存储哪些类型的子集,并且由于在实现该承诺和实际有价值之间可能存在一些代码,因此它们是分开实现的声明。
有趣......你说我差不多完全一样的东西,但我得到-2,你得到+1 ... – 2012-04-19 13:50:53
-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()
@nikhil:我想在这里学习新东西。我会赞赏一些解释,说明它为什么没有意义,而不是这种粗鲁的回答。 – 2012-04-19 13:45:44
@Jack_of_All_Trades:这在任何Java引入文本的第一章中都有解释。在提出问题之前显示一些努力。 – Deestan 2012-04-19 13:49:01