命令行输入参数,并实现排序

命令行输入参数,并实现排序



实验要求:

用Java语言实现,从命令行输入几个数,实现排序并输出。

代码实现

  • 码云链接
  • 核心代码
  • 实验结果
  • 代码分析
    • 首先,要实现从命令行输入参数,首先想到利用Integer。通过一个for循环,不停地将数组args[]中的字符串转换为数值,并赋值给一个同样int[]类型的数组x。实现从命令行将参数传入。
    • 然后,利用双层循环的冒泡排序算法,实现数组x[]的值从小到大排序
    • 最后,将已经排完序的数组x[]输出

实验过程中遇到的问题及解决

1、输入参数后,不出结果

  • 问题举例:

    如上,无论输入几个值,都提示有数组索引超出界限的异常。
  • 分析:
    问题出在输出语句上,语句如下:
for (String i : args) {
System.out.print(i + " ");
}
System.out.println();

该种表达是遍历args[]并输出值,但是args仅为一个字符串,命令行输入的参数转换为数值后被赋予了其他变量,而此输出依然是对该字符串进行的操作,因此是没有值空间的。无论输入几个值都会出现索引值超出界限的异常。
这一点从i的类型“String”也可以看出,它并不是数值,因此根本输出不了。

  • 解决:
    将字符串通过Integer转换为数值并赋值于一个数组x,并最终输出数组x[]的值。
    即,最终输出的循环条件为:for (int i : x)

2、输出结果,但是无排序的原序列

  • 问题举例:

    如图,输入值2 1 5 3,输出结果仍未2 1 5 3,并未进行排序。
  • 分析:
    查看代码,发现有以下问题:

    说明:红色框内表示的是排序比对过程,但是进行比对交换的仅仅为k、p的值,他们仅仅是被赋值args[i]的变量,而非指向数组地址的指针,因此交换k、p并不影响数组args[]的值顺序。所以,输出数组args[]会出现如上错误。
  • 解决:
    定义一个int[]类型的数组x,并将命令行输入的值赋值给它,然后比对交换数组x[]即可,最后输出的当然也是x[]。这样输出的便是排序之后的顺序。

3、输出结果后面跟一串0

  • 问题举例:

    如上图,输出结果是正常排序之后的,但是后面却有一串0
  • 分析:
    查看代码,输出部分如下:

    它相当于:
for (int i = 0; i < x.length; i++) {
System.out.println(x[i]);
}

由此分析,循环条件是x数组的个数,但是题目中定义x时,空间为10个,因此输出个数也为10个,没有数值的用0补齐。

  • 解决:
    将循环终止条件将x.length改为args.length,这样输入个数为几个,就循环几次。

学到了什么

通过这次实验,首先温习了排序算法的运用;然后巩固了如何从命令行传入参数。

感悟和体会

题目可以说非常简单,但实践过程却用了大量时间查找错误。其实一直都在很低级的错误上纠结,这点可以看得出,还是练得少,即使知道要用的知识点,但是运用的却不熟练。总结了一下有两点原因:平时总是依赖于网络,很多简单的代码块在网上比比皆是,自己敲代码时经常为了图快,就直接拿来使用;调错时也是直接去网上搜索方法,而非自己想一想为什么。所以对一些越是简单的越磕绊,还需要将强熟练度,勤动手,并学着将遇到的错误整理、总结并牢记于心。

posted on 2017-06-17 14:40  20169214姚静  阅读(1735)  评论(0编辑  收藏  举报