0

又是理解 Java 的问题。当我问上一个关于Java 中的 Hello world 与 python 的问题时,我收到了将这门语言视为理所当然的建议,直到我没有掌握它。但是,我不能采用这种方法,并且对 Java 与 python 中的一些奇怪的事情感到困惑。

这是从用户那里获取输入并在 python 中将 F 转换为摄氏度的程序。

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);
 }

 }

我认为应该发生的是:Scanner 是 Java 类/类/对象的实例,用于获取用户输入并使用

Scanner in

创建了一个新对象来接受用户输入。事实证明,我们只是在 Java 中声明为 Scanner 类型(如果我错了,请纠正我)。

现在,如果它是 python,我们将调用新创建的 Scanner 对象的方法,该对象从用户那里获取输入。OMG,Java 中这是什么?我们创造

新扫描仪

对象并System.in作为参数传递并将其分配给

再次?

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

任何创造性的建议表示赞赏。

4

4 回答 4

2

你的问题有点乱码,但这是我试图回答的问题。在 Java 中,就像在 Python 中一样,您需要先实例化一个类,然后才能对其调用方法。在 Python 中,您可以这样做:

myvar = MyClass(name="example")

在 Java 中,语法非常相似:

in = new Scanner(System.in);

就像在 Python 中一样,我们现在可以在其上调用方法,例如:

fahr = in.nextDouble();

这与等效的 Python 代码的外观几乎相同。可能我不了解您的困惑的根源,所以如果这没有帮助,请告诉我,我很乐意更新。

于 2012-04-19T13:47:16.297 回答
1

将对象声明视为对 None 的隐式赋值。这在 python 中毫无意义,因为变量没有类型,但它们的 VALUES 有(这就是为什么声明一个变量而不给它赋值是没有意义的)。在 Java 中,当您声明一个变量时,您承诺将在其中存储哪些类型的子集,并且由于在做出该承诺和实际具有要放入其中的值之间可能存在一些代码,因此它们是分开完成的陈述。

于 2012-04-19T13:49:01.967 回答
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

这可以缩短为

Scanner input = new Scanner(System.in);

假设我们在 Python 中有一个 Scanner 类,大致等效的代码是

input_obj = None
input_obj = Scanner()

Python 是动态类型语言,所以不需要声明类型。因此,第一行没有任何用途,可以而且应该省略,这会导致

input_obj = Scanner()
于 2012-04-19T14:02:01.587 回答
-4

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

于 2012-04-19T13:48:03.093 回答