Java中针对Python的相同功能不同(Different out for same function in Java against Python)
我有一个评估公式
((x+y-1)*(x+y-2))/2 + x
并获得它的字符串表示。 所以在Java 1.7中我写了
public static void main(String[] args)
{
int x = 99999;
int y = 99999;
int answer = ((x+y-1)*(x+y-2))/2 + x;
String s = Integer.toString(answer);
System.out.println(s);
}
并在Python 2.7中
def answer(x, y):
z = ((x+y-1)*(x+y-2))/2 + x
return str(z);
print(answer(99999,99999))
Java给了我672047173的输出,而Python给了我19999400005 ,似乎来自Python的价值是正确的。 造成这种差异的原因是什么?
I have a formula to evaluate
((x+y-1)*(x+y-2))/2 + x
and get the string representation of it. So in Java 1.7 I write
public static void main(String[] args)
{
int x = 99999;
int y = 99999;
int answer = ((x+y-1)*(x+y-2))/2 + x;
String s = Integer.toString(answer);
System.out.println(s);
}
and in Python 2.7
def answer(x, y):
z = ((x+y-1)*(x+y-2))/2 + x
return str(z);
print(answer(99999,99999))
Java gave me the out put of 672047173 while Python gave me 19999400005 and seems the value from Python is correct. What is the reason behind this difference.
原文:https://stackoverflow.com/questions/44351263
更新时间:2019-12-30 16:23
最满意答案
19999400005对于int变量19999400005是一个太大的值,所以Java计算会溢出。
改用long变量:
public static void main(String[] args)
{
long x = 99999;
long y = 99999;
long answer = ((x+y-1)*(x+y-2))/2 + x;
String s = Long.toString(answer);
System.out.println(s);
}
输出是:
19999400005
还请注意,您可以直接打印answer ,不必将其明确地转换为String :
System.out.println(answer);
19999400005 is a too large value for int variables, so the Java calculations would overflow.
Use long variables instead:
public static void main(String[] args)
{
long x = 99999;
long y = 99999;
long answer = ((x+y-1)*(x+y-2))/2 + x;
String s = Long.toString(answer);
System.out.println(s);
}
Output is:
19999400005
Also note that you can print answer directly and don't have to convert it to String explicitly:
System.out.println(answer);
2017-06-04
相关问答
因为人工智能,现阶段Python比较火,而且Python编程比较简短,但是Java是很稳定的编程语言,也会比较难,适用更广,手打望采纳。
- -!两种语言都比较的NB Python是一种动态语言,最大的特点是执行时编译。最大的长处是库非常的多而且全,和C/C++结合方便。Python是一种弱类型语言,写程序非常的方便,比如说100000000000000*100000000绝对不会给你算溢出了(当然速度不会快哪里去哈)。呵呵,我学习的时候就拿兔子数列做的实验,印象很深刻。Python语言里有很多很奇异的思想,用起来非常的方便,比如说切片。 JAVA则是换一种思想,首先将代码编译为一种中间层,然后在运行时再次编译。最大的长处是跨平台,
...
您可以使用方法重载来模拟默认参数: int find_root(int base, int nth_root) {
return find_root(base, nth_root, -1, 0);
}
int find_root(int base, nth_root, int top, int bottom) {
// ...
}
You can use method overloading to simulate default parameters: int find_root
...
对于实现List接口的集合,可以调用listIterator()方法来获取ListIterator 。 迭代器具有(以及其他)两个方法 - nextIndex() ,用于获取索引; 和next() ,以获取值(像其他迭代器)。 所以与上述Python相当的Java可能是: List numbers = Arrays.asList("zero", "one", "two");
ListIterator it = numbers.listIterator();
whil
...
您可以使用Jython轻松地从Java代码调用python函数。 只要你的python代码本身就在jython下运行,即不使用一些不支持的C扩展。 如果这对您有用,那肯定是您可以获得的最简单的解决方案。 否则,您可以从新的Java6解释器支持中使用org.python.util.PythonInterpreter 。 一个简单的例子,从我的头顶 - 但应该工作,我希望:(没有错误检查为简洁) PythonInterpreter interpreter = new PythonInterpreter
...
JYthon是java中的python实现,你应该检查出来 www.jython.org JYthon is a python implementation in java , you should check it out www.jython.org
19999400005对于int变量19999400005是一个太大的值,所以Java计算会溢出。 改用long变量: public static void main(String[] args)
{
long x = 99999;
long y = 99999;
long answer = ((x+y-1)*(x+y-2))/2 + x;
String s = Long.toString(answer);
System.out.println(s);
}
...
例如,尝试使用python的完整路径 Process process = Runtime.getRuntime().exec("C:\\Python\\python.exe
C:\\Users\\username\\Desktop\\demo\\filename.py");
Try to use full path to python, for example Process process = Runtime.getRuntime().exec("C:\\Python\
...
当您调用另一个进程时 ,不会返回值。 您唯一可以期待的是数字返回码值。 你真正想要的是这个: 在该进程中运行的程序写入stdout ...或某个文件 然后,触发该进程的python代码可以读取该内容 请参阅此处 ,了解有关python脚本如何读取子进程正在编写其标准输出的说明。 并且为了记录:没有弯路。 如果你打算用你的java代码做任何“严肃”的事情,那么你必须学习足够的Java来实现这一点。 不理解一个说空的方法不能返回一些语句就是一个很好的例子。 对于python方面也是如此。 是的, os
...
Java函数每次迭代只能执行一个return语句。 不管你在函数中写入多少个返回语句,首先在函数的遍历路径中找到的语句都将被执行。 Java function can only execute one return statement per iteration. Doesn't matter how many return statements you write in a function, first one found in traversed path of function will
...