橘络(^_^) 2023-10-25 16:52 采纳率: 0%
浏览 5

JAVA代码中运行后为什么会出现Runtime Error,应该怎么改啊?

**描述
编写一个类,输出按升序排列的一维数组。基本的程序框架以及说明如下,请不要改

此题必须严格按照上述框架

格式
输入格式
输入为两行,第一个行是一个正整数n(1≤n≤200),表示要排序的数目。第二行起是n个整数,各个整数之间用空格隔开。

输出格式
一行,升序排序的数据,数据之间用空格隔开

样例
输入样例
10
583 277 850 963 649 966 627 897 769 9
输出样例
9 277 583 627 649 769 850 897 963 966


import java.util.Scanner;

public class SortArray {
    double a[];
    public SortArray(int n){
         a=new double[n];
         init();
    }
    public SortArray(){
         this(10);
    }
    private void init(){
        for(int i=0;i<a.length;i++){
              a[i]=(int)(Math.random()*1000);
        }
    }
    public SortArray(double data[]){
           a=new double[data.length];
           for(int i=0;i<data.length;i++){
            a[i]=data[i];
           }
    }
    public void show(){
        for(int i=0;i<a.length;i++){
            System.out.print((int)a[i]+" ");
        }
           System.out.println();
    }
    public void sort(){
        for(int i=0;i<a.length-1;i++){
            for(int j=0;j<a.length-1-i;j++){
                if(a[j]>a[j+1]) {
                    double temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }

        }

    } 
    public void getData(){
        Scanner scanner=new Scanner(System.in);
        for(int i=0;i<a.length;i++){
            a[i]=scanner.nextDouble();
        }
    }
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        SortArray va=new SortArray(n);
        va.getData();
        va.sort();
        va.show();
    }
}
  • 写回答

2条回答 默认 最新

  • 专业研究祖传Bug编写术 全栈领域新星创作者 2023-10-25 17:00
    关注

    首先,从你提供的代码来看,存在一些可能的问题。我将按顺序分析它们。

    1. 输入问题:在 getData() 方法中,你从控制台读取用户输入并直接存入数组。如果用户输入的不是数字,Scanner.nextDouble() 将会抛出 InputMismatchException。为了解决这个问题,你需要检查用户的输入是否是数字,或者在读取失败时进行适当的错误处理。
    2. 构造函数的调用:在 SortArray(double data[]) 这个构造函数中,你创建了一个新的 double 数组,但是没有将传入的 data 数组中的值复制到 a 数组中。这意味着你的 a 数组可能并没有被正确初始化。你可能需要添加一个循环来复制 data 数组中的值。
    3. 排序问题:你的 sort() 方法实现了冒泡排序。如果数组的长度非常大,这个方法可能会导致性能问题。但是,对于小到中等大小的数组,冒泡排序是可以接受的。
      以下是对这些问题的修复:
    public void getData() {  
        Scanner scanner = new Scanner(System.in);  
        for (int i = 0; i < a.length; i++) {  
            while (true) {  
                System.out.print("Enter a double: ");  
                try {  
                    a[i] = scanner.nextDouble();  
                    break;  
                } catch (InputMismatchException e) {  
                    System.out.println("Invalid input! Please enter a double value.");  
                    scanner.nextLine(); // Clear the invalid input  
                }  
            }  
        }  
    }
    

    对于第二个问题,你需要修改你的 SortArray(double data[]) 构造函数,如下所示:

    public SortArray(double data[]) {  
        a = new double[data.length];  
        for (int i = 0; i < data.length; i++) {  
            a[i] = data[i];  
        }  
    }
    

    最后,你的 sort() 方法应该是正确的。我没有对其进行修改,因为冒泡排序是正确的,只是可能需要考虑数组的大小和你的具体需求来选择是否使用这个方法。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月25日

悬赏问题

  • ¥60 用r语言进行数据分析
  • ¥20 关于游戏c++语言代码问题
  • ¥15 如何制作永久二维码,最好是微信也可以扫开的。(相关搜索:管理系统)
  • ¥15 delphi indy cookie 有效期
  • ¥15 labelme打不开怎么办
  • ¥35 按照图片上的两个任务要求,用keil5写出运行代码,并在proteus上仿真成功,🙏
  • ¥15 免费的电脑视频剪辑类软件如何盈利
  • ¥30 MPI读入tif文件并将文件路径分配给各进程时遇到问题
  • ¥15 pycharm中导入模块出错
  • ¥20 Ros2 moveit2 Windows环境配置,有偿,价格可商议。