繁体   English   中英

Java程序停止无错误

[英]java program stops without error

我有一个非常简单的程序,它将选择排序100000个数字需要花费多长时间。 这是代码:

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Stopwatch {

    public static void main(String[] args) {
        // Create a stopwatch
        int howManyNumbers = 100000;
        Integer[] numbers = new Integer[howManyNumbers];
        for (int i = 0; i < numbers.length; i++)    {
            numbers[i] = (int)(100 * Math.random());
        }
        System.out.println("Array created");
        StopWatching watch = new StopWatching();

        System.out.println("Sorting started");
        for (int i = 0; i < numbers.length; i++ )   {
            for (int j = i; j < numbers.length; j++)    {
                if (numbers[j] < numbers[i])    {
                    int temp = numbers[i];
                    numbers[i] = numbers[j];
                    numbers[j] = temp;
                }
            }
        }
        System.out.print("Finished the sort");
        watch.stop();
        System.out.println();
        System.out.println(watch.getElapsedTime());
        for (int i = 0; i < numbers.length; i++)    {
            System.out.print(numbers[i]);
        }

    }

}

这将运行,在控制台上打印“ Array Created”和“ Sorting Started”,进行一两秒钟,然后停止。 没有错误或警告。 不打印“完成排序”或类似的操作。 应该打印“ Finished the sort”,然后从watch.getElapsedTime()返回的经过时间(StopWatching类的对象有效,已经在其他环境中进行了测试)。

有人可以在这里指出我在做什么错吗?

注意:watch.getElapsedTime()的返回类型是Long,它是从创建手表到调用watch.stop()方法(通过使用GregorianCalendar类)计算的时间,以毫秒为单位。

PS我正在使用Eclipse IDE

问题是Eclipse的GUI控制台输出。

编码

for (int i = 0; i < numbers.length; i++)    {
    System.out.print(numbers[i]);
}

在一行中打印100000个数字。 在OS控制台中使用java运行时,这没有问题。

但是,在Eclipse中完成操作后,控制台将关闭,并删除以前的所有打印输出。


这是我第一次尝试分析:

我猜该程序没有停止,但仍在运行。 循环的内部执行了100000 * 100000次。

在Eclipse中,使用调试视图查看程序是否已停止或仍在运行。

该程序运行正常。 Eclipse控制台显示的输出太多了。 如果从命令行运行它,然后将输出重定向到文件> output.txt,那么will输出将正确显示。

您还可以在Eclipse中看到输出的一部分,用StringBuilder替换System.out.println,将整个输出附加如下,

    StringBuilder sb = new StringBuilder(2048);
    sb.append("Array created\n");

    sb.append("Sorting started");
    for (int i = 0; i < numbers.length; i++) {
        for (int j = i; j < numbers.length; j++) {
            if (numbers[j] < numbers[i]) {
                int temp = numbers[i];
                numbers[i] = numbers[j];
                numbers[j] = temp;
            }
        }
    }
    sb.append("Finished the sort\n");
    for (int i = 0; i < numbers.length; i++) {
        sb.append(numbers[i]);
        sb.append(", ");
    }
    System.out.println(sb);

或者,在Eclipse控制台中,右键单击“属性”,然后选中“限制控制台输出”以将其取消选中(默认情况下选中),所有输出将显示在Eclipse中。

在此处输入图片说明

有时打印换行符(此处为println)。 这将刷新输出缓冲区。

   for (int i = 0; i < numbers.length; i++)    {
        System.out.println(numbers[i]);
   }

备注:最好是使用原始类型int:

    int[] numbers = new int[howManyNumbers];

Integer是int值的包装器类。 否则使用:

    Integer temp = ...

会立即进行整数/整数转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM