두 가지 빠른 수정 문제 - 병합 정렬 (two quick fix issues - Merge Sort)


문제 설명

두 가지 빠른 수정 문제 ‑ 병합 정렬 (two quick fix issues ‑ Merge Sort)

내 버전의 병합 정렬 알고리즘을 Java 코드로 만들었습니다. 내 문제는 다음과 같습니다. 코드를 있는 그대로 실행하면 27번째 줄의 메인에 NullPointerExecpetion이 표시됩니다(주석된 줄 참조). 그리고 메서드를 호출하고 정적 상태가 되지 않고 newArray를 인스턴스화하는 방법이 있다는 것을 알고 있지만 어떻게 .. 누군가 이 문제를 해결하는 데 도움을 줄 수 있습니까? 저는 아직 자바에 익숙하지 않아서 좋습니다. :)

Main:

import java.util.Random;

public class MergeSort_main 
{
public static void main(String[] args) 
{
    int[] originalArray = new int[1000];
    Random rand = new Random();

    for (int i = 0; i < originalArray.length; i++)
    {
        int randNum = rand.nextInt(1000)+1;
        originalArray[i] = randNum;
    }

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

    System.out.println("‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑End Random Array‑‑‑‑‑‑‑\n");

    MergeSortAlgorithm.mergeSortAlg(originalArray);
    int[] sortedArray = MergeSortAlgorithm.getSortedArray();


    for(int i = 0; i < sortedArray.length; i++) //NULL POINTER EXCEPTION HERE
    {
        System.out.println(i+ "." + sortedArray[i]);
    }

   }    
}

Algorithm Class:

public class MergeSortAlgorithm 
{

private static int[] newArray;


 public static void mergeSortAlg(int[] randomNums) 
 {       
        int size = randomNums.length;

        if (size < 2)
        {
            return; //if the array can not be split up further, stop attempting to split. 
        }
        int half = size / 2;

        int firstHalfNums = half;
        int secondHalfNums = size ‑ half;

        int[] firstArray = new int[firstHalfNums];
        int[] secondArray = new int[secondHalfNums];

        for (int i = 0; i < half; i++) 
        {
            firstArray[i] = randomNums[i];
        }

        for (int i = half; i < size; i++) 
        {
            secondArray[i ‑ half] = randomNums[i];
        }
        mergeSortAlg(firstArray);
        mergeSortAlg(secondArray);
        merge(firstArray, secondArray, randomNums);
    }

    public static void merge(int[] firstArray, int[] secondArray, int[] newArray) 
    {
        int firstHalfNums = firstArray.length;
        int secondHalfNums = secondArray.length;
        int i = 0; //iterator for firstArray
        int j = 0; //iterator for second array
        int k = 0; //interator for randomNums array

        while (i < firstHalfNums && j < secondHalfNums) 
        {
            if (firstArray[i] <= secondArray[j]) 
            {
                newArray[k] = firstArray[i];
                i++;
                k++;
            } 
            else 
            {
                newArray[k] = secondArray[j];
                k++;
                j++;
            }
        }
        while (i < firstHalfNums) 
        {
            newArray[k] = firstArray[i];
            k++;
            i++;
        }
        while (j < firstHalfNums) 
        {
            newArray[k] = secondArray[j];
            k++;
            j++;
        }  


    }

    public static int[] getSortedArray()
    {
        return newArray;
    }


}

참조 솔루션

방법 1:

Basically, the only problem with your code is that you don't initialize newArray with any values, resulting in a null.

You are also redefining newArray at the top of your merge function .

방법 2:

The problem is that newArray[] is never instantiated i.e. newArray reference is pointing to null. And, no change is made in the newArray so value or reference returned to main is null. And, then you are performing sortedArray.length where sorted array having a null value.

You have to make newArray[] point to randomNums[].

(by user3712626ahitt6345Ashish Ani)

참조 문서

  1. two quick fix issues ‑ Merge Sort (CC BY‑SA 2.5/3.0/4.0)

#mergesort #nullpointerexception #java






관련 질문

파이썬에 대한 병합 정렬(잘못된 것을 찾을 수 없음) (Merge Sort in place for python (Cant find what is wrong))

두 가지 빠른 수정 문제 - 병합 정렬 (two quick fix issues - Merge Sort)

Java로 작성된 병합 정렬 프로그램이 작동하지 않습니까? (My merge sort program written in Java is not working?)

MergeSort 문제: "... VariableDeclaratorId"가 FormalParameterList를 완료합니다. (MergeSort Issues: "... VariableDeclaratorId" to complete FormalParameterList)

크기가 16인 배열로 병합 정렬의 복잡성을 찾는 방법 (how can we find the complexity of merge sort with an array of size 16)

Java 병합 정렬의 정렬 부분 이해 (Understanding the sort part of Java Merge sort)

이 재귀가 기본 사례를 얻지 못하는 이유는 무엇입니까? (Why is this Recursion not getting its base case?)

Java 오류: java.lang.IllegalArgumentException: 비교 방법이 일반 계약을 위반함 (Java Error: java.lang.IllegalArgumentException: Comparison method violates its general contract)

수정된 MergeSort 런타임 (Modified MergeSort runtime)

내 병합 정렬 프로그램이 Java에서 범위를 벗어난 배열을 보여줍니다. (My merge sort program shows an array out of bound in Java)

Array Merge sort Sorting Count and Sorting time Python (Array Merge sort Sorting Count and Sorting time Python)

병합 정렬을 사용하여 연결 목록 정렬에 대한 오답 얻기 (Getting wrong answer for sorting linked list using merge sort)







코멘트