2015-11-22 76 views
0

基本上我的问题是,哪些情况下变量声明是多余的? 作为一个例子:Java中不必要的变量声明?

 int[] number = new int[100] 
     for (int i = 1; i < number.length; i++) { 
      if (number[i] > max) 
       max = number[i]; 
      if (number[i] < min) 
       min = number[i]; 
     }//End of For 
    int range = max - min; 
    System.out.println("The range is " + range); 

是对范围可变好的代码或者是它不是必需的?它可以在打印语句中用min-max代替。

+6

“好代码”通常是主观的。 – ricky3350

+2

好的代码是易于理解和维护的代码。如果您认为添加一个变量(并根据其目的命名)会提高可读性,请不要犹豫。 –

回答

0

简单地说,如果一个额外的变量声明使得代码更易读,这是好的。

不要去想额外的变量赋值使你的代码执行那样的恶化或任何东西,让编译器处理它。根据具体情况,变量将被内联,但是您可以获得更多可读代码的好处。

你的range而不是max - min的例子在我看来有些接近它,但如果表达式会更复杂,那么是的,把它分解成更小,更容易理解的部分。作为一个额外的好处,它会使你的代码稍后更容易重构。

3

这一切都归结到你的代码的可读性和可维护性。对于这个简单的表达range可以通过max - min被取代,但你可能需要range值进一步下降在您的计算并不断将其代由max - min可能成为累赘。如果经常重复使用单个变量range会更方便。

+0

好的,在这种情况下,由于代码在使用完后不再使用范围,但是在更大的程序中它会保持可读性。 –

+0

是的,我同意你的评估。如果代码在这里结束,那么你不需要有一个新的变量。 – vsnyc

+0

但没有理由不要有一个新的变量。我不认为这会伤害任何东西。 – Thevenin

1

我会写但int range = max - min;给你也行

System.out.println("The range is " 

这将是公平的假设,什么都来后,它应该是的范围内。

System.out.println("The range is " + (max - min)); 

注意:如果您包含范围实际上是max - min + 1例如,如果max和min是相同的,则有一个可能的数字。

在Java 8,你可以写

IntSummaryStatistics iss = IntStream.of(numbers) 
            .summaryStatistics(); 
System.out.println("The range is " + (iss.getMax() - iss.getMin())); 
+0

@PaulBoddington谢谢,我知道它必须更简单,但无法弄清楚。 –

0

数组下标0(不1)开始,你应该尽量不推倒重来。 Math可以简化获得minmax。但是您需要声明并初始化maxmin。我更喜欢for-each loop。接下来,我认为尽可能减少变量的范围是一个很好的实践。类似的,

int[] number = new int[100]; 
// populate number array... then, 
int max = Integer.MIN_VALUE, min = Integer.MAX_VALUE; 
for (int num : number) { 
    max = Math.max(max, num); 
    min = Math.min(min, num); 
} 
int diff = max - min; // <-- only if you need it later... 
System.out.printf("The range is %d - %d (%d diff)%n", min, max, diff); 
+0

我在CS类中使用的教科书使用了我发布的for循环来查找最大值。我们还没有真正涉及到数学库。我在分配数组中的每个数字后运行这个程序,看到它的工作,但我不知道它是如何工作的。 –

+0

@MilesGaitan你不明白哪个部分? –

+0

for循环。 (int num:number)是什么意思?我也不确定max = Math.max(max,num)。 –