在使用“c++”的“atom”ide中,这种“插入排序”代码正确地给出了输出,但在使用“java”的“intellij idea”中,同样的代码给出了超出范围的索引

qlfbtfca  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(412)
  1. package JavaTest1;
  2. import java.util.Scanner;
  3. public class javatest1000 {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int n = sc.nextInt();
  7. int[] arr = new int[n];
  8. //taking input of the array
  9. for (int i = 0; i < n; i++) {
  10. arr[i] = sc.nextInt();
  11. }
  12. for (int i = 1; i < n; i++) {
  13. int current = arr[i];
  14. int j = i - 1;
  15. while (arr[j] > current && j >= 0) {
  16. arr[j + 1] = arr[j];
  17. j--;
  18. }
  19. arr[j + 1] = current;
  20. }
  21. //printing output of the sorted array
  22. for (int i = 0; i < n; i++) {
  23. System.out.print(arr[i] + " ");
  24. }
  25. }
  26. }
wwwo4jvm

wwwo4jvm1#

首先,java抛出了一个异常,因为java代码中确实存在一个bug。在intellij或java中看到bug的结果(坦率地说)是不可信的。
(我不打算试图找出错误是什么。这是你的家庭作业。如果您想知道如何继续,请阅读如何调试小程序。)
所以如果C版本工作,有两种可能性:
java实现不是C
实现的正确翻译。
C版本也有bug,但它们没有作为崩溃来显示。
我的理解是,典型的C
实现不执行下标操作的严格边界检查。因此,通常可以引用数组末尾(或开始之前)以外的值,而不会触发错误。未指定执行此操作的代码的行为,但应用程序有可能正常工作。。。在某些平台上,对于某些输入等。。。尽管有bug。
换句话说,“它没有崩溃”并不意味着“它是正确的”。不适用于C++、java或任何编程语言。

相关问题