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

qlfbtfca  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(257)
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] + " ");

    }
  }
}
wwwo4jvm

wwwo4jvm1#

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

相关问题