这"Insertion sort"代码"Atom" ide 中使用 "C++" 正确提供输出,但在"Intellij Idea"使用"java"相同的代码中,索引超出界限


package JavaTest1;
import java.util.Scanner;
public class javatest1000 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
//taking input of the array
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
for (int i = 1; i < n; i++) {
int current = arr[i];
int j = i - 1;
while (arr[j] > current && j >= 0) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = current;
}
//printing output of the sorted array
for (int i = 0; i < n; i++) {
System.out.print(arr[i] + " ");
}
}
}

首先,Java抛出异常,因为Java代码中确实存在错误。(坦率地说(您在Intellij或Java中看到错误的结果是不可信的。

(我不会试图找出错误是什么。这是你的家庭作业。如果你想知道如何继续,请阅读如何调试小程序。(

所以。。。如果C++版本有效,有两种可能性:

  • 您的Java实现不是C++实现的正确翻译。

  • C++版本也有错误,但它们并没有表现为崩溃。

我的理解是,典型的C++实现不会对下标操作执行严格的边界检查。因此,您可以经常引用数组末尾(或开始之前(以外的值,而不会触发错误。执行此操作的代码的行为是未指定的,但应用程序有可能工作。。。在一些平台上,对于一些输入等。。。尽管存在错误。

换言之;它不会崩溃";并不意味着";它是正确的";。不适用于C++、Java或任何编程语言。

最新更新