Java程序中的逻辑错误

时间:2011-06-10 10:51:46

标签: java

我创建了两个接收数字的方法,并且应该从该数字计数到0并打印出来。一种方法包含一个while循环,它工作正常。另一种方法使用for循环。但由于某种原因,我没有在使用for循环的方法中获得预期的输出。怎么样?

 import java.util.*; 

 public class Methods 
 {
     public static void main(String[] args)
     {
         int n = 10;   
         countdown(n); 
         countdown2(n); 
     }

     public static int countdown(int num)
     {
         while(num >= 0)
         {
             System.out.println(num); 
             num--;
         }
             return 0; 
     }

     public static int countdown2(int number)
     {
         for(int i = number; i <= number; i--)
         {
             System.out.println(number);
             number--;
         }
             return 0;        
     }
 }

7 个答案:

答案 0 :(得分:4)

由于你构建for循环条件的方式:

  1. i最初设置为与number相同的值。
  2. i小于或等于number时,循环继续。
  3. i每次循环都会减少
  4. 由于i开始时小于或等于number,并且变小,所以您不会很快退出循环。 (只有在i降至Integer.MIN_VALUE并且在下一次迭代时下溢到Integer.MAX_VALUE时才会发生这种情况。

    将条件更改为i > 0将是解决此问题的一种方法;或者你最初可以将i设置为零,并在每次循环循环时递增它。

答案 1 :(得分:2)

 for(int i = number; i <= number; i--)

检查循环您的计数仅从数字开始。 你应该从数字到0来计算。

  for(int i = number; i >= 0; i--)

答案 2 :(得分:1)

 public static int countdown2(int number)
 {
     for(;number>=0;)
     {
         System.out.println(number);
         number--;
     }
         return 0;        
 }

答案 3 :(得分:1)

如果程序的行为方式确实有意义,那么首先应该尝试使用调试器来调试代码。这允许您逐行逐步执行程序并查看所有值


如果你有一个while循环,你可以像这样用for循环交换它(假设你没有continue语句)

for({initialise variable};{condition};{update expression}) {
    {do something}
}

{initialise variable}
while({condition}) {
    {do something}
    {update expression}
}

{initialise variable}
while(true) {
    if ({condition}) break;
    {do something}
    {update expression}
}

{initialise variable}
if({condition}) 
  do {
    {do something}
    {update expression}
  } while({condition});

答案 4 :(得分:0)

那应该有用

public static int countdown2(int number)
{
    for(int i = number; i >= 0; i--)
    {
       System.out.println(number);
       number--;
    }
    return 0;        
}

答案 5 :(得分:0)

第二个循环中的条件应为

i >= 0

答案 6 :(得分:0)

public static int countdown2(int number)
 {
     for(int i = number; i >= 0; i--)
     {
         System.out.println(number);
         number--;
     }
     return 0;        
 }