zoukankan      html  css  js  c++  java
  • 命令行输入参数,并实现排序

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



    实验要求:

    用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,这样输入个数为几个,就循环几次。

    学到了什么

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

    感悟和体会

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

  • 相关阅读:
    js上拉加载下拉刷新
    CSRF
    Linux 常用命令
    汇编语言:了解寄存器与内存模型
    Node 的fs模块
    pdf转为html查看pdf.js
    centOs升级
    H5新特性监听手机的返回键
    gsap
    使用 iframe + postMessage 实现跨域通信
  • 原文地址:https://www.cnblogs.com/yaojingjing/p/7040077.html
Copyright © 2011-2022 走看看