【问题标题】:Exception---I read all the previous answers and can't figure out a solution. kindly explain the mistake i have done and give the solution for it例外---我阅读了所有以前的答案,但无法找到解决方案。请解释我所做的错误并给出解决方案
【发布时间】:2017-03-17 20:54:45
【问题描述】:

我是 Java 新手。我编写了一个程序来使用冒泡排序算法对数组进行排序。我有 3 种方法 getArray()putArray()sortArray()。我已经从 main 函数中调用了所有这些方法,传递了元素的数量和一个数组作为参数。我已将一个空数组传递给getArray() 函数,并将该数组作为用户的输入。当我得到输入时,我得到了异常。请帮帮我。我真的被困了。`

import java.util.Scanner;
public class BubbleSort {
    public void getArray(int num,int[]arr) {
        System.out.print("Enter the total number of elements in the Array :  ");
        Scanner sc = new Scanner(System.in);
        num = sc.nextInt();
        System.out.println(num);
        System.out.print("Enter " + num + " Elements  : ");
        for (int i = 0; i < num; i++) {
            arr[i] = sc.nextInt();
        }
    }
    public void putArray(int num,int[] arr) {
        System.out.print("The Array is:  ");        
        for (int i = 0; i < num; i++) {
            System.out.println(arr[i] + "  ");
        }
    }
    public void sortArray(int num,int[] arr) {
        for (int i = 0; i < num; i++) {
            boolean flag = false;
            for (int j = 0; j < num - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    arr[j] = arr[j] + arr[j + 1];
                    arr[j + 1] = arr[j] - arr[j + 1];
                    arr[j] = arr[j] - arr[j + 1];
                    flag = true;
                }
            }
            if (!flag) {
                break;
            }
        }
    }
    public static void main(String[] args) {        
        int num=0;
        int[] arr=null;
        BubbleSort b = new BubbleSort();
        b.getArray(num,arr);
        b.putArray(num,arr);
        b.sortArray(num,arr);
        b.putArray(num,arr);
    }
}

【问题讨论】:

    标签: java arrays parameter-passing


    【解决方案1】:

    这是因为您正在传递空数组并尝试在该空数组中设置输入。

    for (int i = 0; i < num; i++) {
                    arr[i] = sc.nextInt();
                }
    

    这里,在上面的代码中,arr 为 null,将值添加到 0 索引将引发 nullpointer 异常。因此,您必须根据给定的 num 大小初始化数组。 即

    arr = new int[num];
    

    重写函数:

    public class BubbleSort {
        private int num;
    
    public int[] getArray() {
        System.out.print("Enter the total number of elements in the Array :  ");
        Scanner sc = new Scanner(System.in);
        num = sc.nextInt();
        System.out.println(num);
    
        int[] arr = new int[num];
    
        System.out.print("Enter " + num + " Elements  : ");
        for (int i = 0; i < num; i++) {
            arr[i] = sc.nextInt();
        }
        return arr;
    }
    
    public void putArray(int num, int[] arr) {
        System.out.print("The Array is:  ");
        for (int i = 0; i < num; i++) {
            System.out.println(arr[i] + "  ");
        }
    }
    
    public void sortArray(int num, int[] arr) {
        for (int i = 0; i < num; i++) {
            boolean flag = false;
            for (int j = 0; j < num - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    arr[j] = arr[j] + arr[j + 1];
                    arr[j + 1] = arr[j] - arr[j + 1];
                    arr[j] = arr[j] - arr[j + 1];
                    flag = true;
                }
            }
            if (!flag) {
                break;
            }
        }
    }
    
    public int getNum() {
        return num;
    }
    
    public void setNum(int num) {
        this.num = num;
    }
    
        public static void main(String[] args) {
    
        int num = 0;
        int[] arr = null;
        BubbleSort b = new BubbleSort();
    
        arr = b.getArray();
        b.putArray(b.getNum(), arr);
        b.sortArray(b.getNum(), arr);
        b.putArray(b.getNum(), arr);        
    }
    
    }
    

    【讨论】:

    • 我改了代码,异常消失了。但是数组没有从 putArray() 函数显示
    • 根据我的回答,因为num 的值不会改变
    • 因为,arr 是在 getArray() 函数内部初始化的,所以它不会存储值。因此,您必须退回并使用它。我会更新答案。
    • @RaKa。我根据您的最新编辑更改了代码。仍然没有显示数组。我是否也应该更改其他方法
    • 好的,num 变量也是如此。请考虑理解 java 函数传递值并通过引用传递。另外,我已经更新了修改后的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多