当前位置: 首页 > 面试题库 >

在for语句的终止表达式中使用数字文字有什么区别?

宇文修文
2023-03-14
问题内容

为什么这段代码:

String value = JOptionPane.showInputDialog("Enter x"); //Input = 100
int x = Integer.parseInt(value);
double result = 1;

for (int i = 1; i <= x; i++) //used variable "x" here
{
    result += (x * 1.0) / fact(i);
    x *= x;
}

public static int fact(int n) {
    int fact = 1;
    for (int i = 1; i <= n; i++) {
        fact *= i;
    }
    return fact;
}

工作与此不同吗?

String value = JOptionPane.showInputDialog("Enter x"); //Input = 100
int x = Integer.parseInt(value);   
double result = 1;

for (int i = 1; i <= 100; i++) //and here I used the value "100"
{
    result += (x * 1.0) / fact(i);
    x *= x;
}

public static int fact(int n) {
    int fact = 1;
    for (int i = 1; i <= n; i++) {
        fact *= i;
    }
    return fact;
}

我所做的唯一更改是在终止表达式中使用了值100而不是使用了变量x!

当我运行第一个代码时,我得到:

9.479341033333334E7

但是,第二个我总是得到

NaN

为什么?


问题答案:

这两个摘要之间的区别是:

for (int i = 1; i <= x; i++) {

for (int i = 1; i <= 100; i++) {

在第一种情况下,x每次都会变得更大!最终,它将在x 溢出时停止并变为0,这比第二种情况要早得多。有关为什么导致0而不是其他随机数的解释,请参见:为什么此乘法整数溢出导致为零?

在第二种情况下,当i = 34fact(n)将返回0,所以双师是(0 * 1.0) /0其导致NaN。加到时NaN,任何double都会变成NaN,这就是第二个片段产生的原因NaN。请参阅:在Java中,NaN是什么意思?



 类似资料:
  • 本文向大家介绍表达式和语句有什么区别?如何把语句转换为表达式?相关面试题,主要包含被问及表达式和语句有什么区别?如何把语句转换为表达式?时的应答技巧和注意事项,需要的朋友参考一下 简单的说来,表达式(Expression)是语句(Statement)的子集,表达式一定会返回一个值,而语句不会。 比如定义变量、返回语句都属于语句,而逻辑判断、方法调用、赋值都属于表达式。 支持语句的地方都支持表达式,

  • 问题内容: 我是Java的初学者,我想知道Java表达式和语句之间的区别吗? 问题答案: 这是一个例子: 是一个表达而是一个陈述。语句由表达式组成。 这不是特定于Java语言的。许多语言都使用这种语法,例如etc(not )。

  • 问题内容: 在Python中,表达式和语句之间有什么区别? 问题答案: 表达式仅包含标识符,文字和运算符,其中的运算符包括算术运算符和布尔运算符,函数调用运算符 包括预订运算符 等,并且可以简化为某种“值”,可以是任何Python对象。例子: 声明(请参阅 1,另一方面,2)是构成一行(或几行)Python代码的所有内容。注意表达式也是语句。例子:

  • 问题内容: 我知道什么是循环(对键进行迭代),但是第一次听说(对值进行迭代)。 我对循环感到困惑。我没有形容词。这是下面的代码: 我得到的是,遍历属性值。那么,为什么它不记录(返回)而不是?但是循环遍历每个键()。在这里,循环还会遍历键。但是不会迭代财产的价值,即。为什么会这样呢? 总而言之: 在这里,我控制台循环。它应该记录,但是在这里记录。为什么呢 问题答案: 遍历对象的可枚举属性名称。 (E

  • 问题内容: 我很好奇:这两个循环实现之间在速度和性能上是否有所不同?假定 size() 方法返回处理一组元素的数组,集合或对象的长度(实际上是来自 XOM api)。 实施1: 实施2: 问题答案: 从性能的角度来看,没有什么区别。这是因为可以优化循环,以便内联size()查找,从而导致很小的性能差异。 主要区别在于循环时大小是否改变。第一种情况将尝试迭代固定次数。在第二种情况下,迭代次数将取决于

  • 与...的循环中,该循环迭代每个键()并迭代键,用于...的值不迭代属性的值,即。为什么是那样? 在这里,我为...控制台循环的。它应该记录但它记录。为什么? 示例链接