文章目录

  • 数组的遍历和快速打印
  • 冒泡排序和快速排序
  • 数组和字符串排序的区别
  • 多维数组建立和输出
  • 命令行向main()传递参数

数组的遍历和快速打印

一、数组的遍历

数组的遍历有两种方法,一种是使用for循环,另一种是使用for each。

for each的基本使用方法为:

for (int element:ns) {System.out.println(element);                           // element直接返回ns数组里面的元素
}

需要注意的是:

  1. 使用for each看起来更加简洁
  2. 但是在使用for each的时候,是不能得到数组的索引的
  3. 返回类型诸如int容易遗漏

二、数组的快速打印

数组的打印也有两种方法,一种是使用for循环或者for each挨个打印元素,另一种是转换成字符串直接打印。

转换成字符串直接打印看起来更加简洁,需要使用到方法Arrays.toString(),使用方法之前需要import java.util.Arrays,这个编译器会自动帮你生成。

import java.util.Arrays;                                 // 导入标准库函数
System.out.println(Arrays.toString(ns));    // 转化成字符串打印输出

需要注意的是:

  1. 如果是使用ns.toString()返回的是字符串的地址

  2. 只有使用Arrays.toString(ns)返回的才是字符串本身

  3. 数组在转换成字符串在打印的时候,不会自动添加换行

三、代码案例

import java.util.Arrays;public class ArrayOperation {public static void main(String[] args) {//      新建一个数组int[] ns = {1,4,9,16,25};//      1,使用for循环遍历数组for (int i=0;i<ns.length;i++){System.out.println(ns[i]);}//       2,使用for each 遍历数组
//      for each循环更加简洁,但是拿不到下标索引
//      这里的element不是一个索引!
//      这里的element相当于一个迭代器,从ns[]这个数组里面挨个提取内容for (int element:ns) {System.out.println(element);}//        3,快速打印数组里面的内容
//      要想快速打印数组里面的内容,需要把数组转变成字符串
//      Java标准库里面提供了这种方法:Arrays.toString()
//      3.1 注意这个写法是错误的,将会返回字符串的引用地址!System.out.println(ns.toString());
//      3.2 这个写法才能返回字符串里面的内容System.out.println(Arrays.toString(ns));    }
}

冒泡排序和快速排序

一、冒泡排序

数组冒泡排序最容易错的有两点:

  1. 数组本身是一个引用,所以必须直接改变数组本身的引用关系,否则是不会对值产生改变的。
  2. 冒泡排序的第二层循环变量范围,应该是[左边第一个未排序,右边最后一个排好序]的下标。

数组冒泡排序的核心代码

for (int i=0;i<ns.length-1;i++) {for (int j=1;j<ns.length-i;j++) {// 开始比较大小,小的在前,大的在后if (ns[j-1]>ns[j]) { // 进行交换int temp = ns[j-1]; ns[j-1] = ns[j]; ns[j] = temp;      } } }
System.out.println(Arrays.toString(ns));

二、快速排序

Java标准库内置了一个Arrays.sort()方法,可以直接调用

三、代码示例

这里面包含了自己身上犯的两个常见错误

import java.util.Arrays;public class ArrayOperation {public static void main(String[] args) {//      新建一个数组int[] ns = {28, 12, 89, 73, 65, 18, 96, 50, 8, 36};  //      1, 练习冒泡排序for (int i=0;i<ns.length-1;i++) {for (int j=i+1;j<ns.length;j++) {int left = ns[j-1];int right = ns[j];
//              进行排序,小的在前,大的在后if (left>right){//                  交换大小int temp = left;left = right;right = temp;} //end if} // end for j} // end for i
//      你会惊讶地发现,数组没有发生任何改变!
//      怎么回事?
//      因为数组的本质是引用System.out.println(Arrays.toString(ns));//[28, 12, 89, 73, 65, 18, 96, 50, 8, 36]//       2, 重来冒泡排序for (int i=0;i<ns.length-1;i++) {for (int j=i+1;j<ns.length;j++) {//              开始比较大小,小的在前,大的在后
//              直接使用数组下标索引试试看if (ns[j-1]>ns[j]) {//                  进行交换int temp = ns[j-1];ns[j-1] = ns[j];ns[j] = temp;     } //end if}//end for j}//end for i
//      你会惊讶地发现,仍然出错了,咋回事?
//      想象一下,大的泡泡一直往后冒,所以最后一个元素是确定的
//      所以第二层遍历应该是从最左边到排好序的那个元素,
//      即j的范围应该是[1,ns.length-i]System.out.println(Arrays.toString(ns));//12, 28, 18, 50, 8, 36, 65, 73, 89, 96]//       3, 再来冒泡排序for (int i=0;i<ns.length-1;i++) {for (int j=1;j<ns.length-i;j++) {//              开始比较大小,小的在前,大的在后if (ns[j-1]>ns[j]) {//                  进行交换int temp = ns[j-1];ns[j-1] = ns[j];ns[j] = temp;     } //end if}//end for j}//end for iSystem.out.println(Arrays.toString(ns));//[8, 12, 18, 28, 36, 50, 65, 73, 89, 96] 成功!//        4,使用系统自带的排序方法ns = new int[] {23,45,67,89,10};Arrays.sort(ns);System.out.println(Arrays.toString(ns));// [10, 23, 45, 67, 89]}
}

数组和字符串排序的区别

  1. 对数组的排序,修改了数组本身的顺序

  2. 对字符串数组的排序,实际上修改的是引用(指向)的关系


多维数组建立和输出

1,多维数组的新建使用int[][]类型

2,多维数组使用.length()方法得到的长度和实际长度是不一样的,其本质是一维数组的嵌套

3,多维数组的打印使用Arrays.deepToString()这个函数

import java.util.Arrays;public class ArrayOperation {public static void main(String[] args) {//      多维数组
//      新建的时候需要注意返回类型是int[][]int[][] new_ns = {{ 1, 2, 3, 4 },{ 5, 6, 7, 8 },{ 9, 10, 11, 12 }};System.out.println(new_ns.length);     //3System.out.println(new_ns[0].length);    //4
//      多维数组的打印输出使用deepToString这个函数System.out.println(Arrays.deepToString(new_ns));}
}

命令行向main()传递参数

  1. main函数是可以引入字符串变量的,通过不同的字符串变量可以得到不同的结果,例如查询版本号。

  2. main函数的变量是在运行时候传递的,所以这里使用命令行进行编译运行。

  3. 使用Arrays.equals()判断两个字符串是否相等

首先在终端中新建一个文件

touch ArrayArgs.java         # 注意和public class后面的类名保持一致
open -e ArrayArgs.java

然后在里面填写下面的函数

public class ArrayArgs{public static void main(String[] args){System.out.println("test if is ok");for (String arg:args){if ("-version".equals(arg)){                     // Array.equals()函数判断字符串是否相等System.out.println("Version: v1.0");break;}// end if}// end for}// end main
}// end class

最后编译运行

javac ArrayArgs.java
java  ArrayArgs.java    -version
# 效果如下
test if is ok
Version: v1.0

参考文章

https://www.liaoxuefeng.com/wiki/1252599548343744/1255945064769408

Java数组学习笔记(遍历、排序、多维数组、命令行参数)相关推荐

  1. 学习笔记_给二维数组赋值

    实例一 P89 给二维数组赋值 2020-03-20 12:27:11 一个私人书柜有3层2列,分别向该书柜第1层1列放入历史类读物,向该书柜第二层第一例放入经济类读物,向第二层第二列放入现代科学读物 ...

  2. openjudge 二维数组右上坐下遍历(二维数组)

    二维数组右上左下遍历 查看 提交 统计 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按 ...

  3. linux学习笔记:1.基础知识和命令行基本操作

    初次学习linux系统,想在这里记录自己的学习痕迹,如发现有不足之处,希望能指出,谢谢啦,之后的学习是在虚拟机VMware 10下的Red Hat Enterprise linux 6 的操作. 一. ...

  4. Android学习笔记Android必备开发工具之一命令行创建Git库

    提供相关文章介绍 http://hi.baidu.com/baixuejiyi1111/blog/item/e7a475a2589123e19152eed9.html http://www.2cto. ...

  5. Linux操作系统学习笔记3【图形界面与命令行】

    文章目录: 本章讨论: 1.Linux图形化管理系统组成部分 2.什么是X Window系统 3.X Window组成 4.什么是KDE桌面 5.什么是GNOME桌面 6. Red Hat Linux ...

  6. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  7. 【java进阶06:数组】使用一维数组模拟栈数据结构 使用二维数组模拟酒店,酒店管理系统 Arrays工具类 冒泡排序算法、选择排序算法、二分法

    目录 数组 二维数组 总结 作业 Arrays工具类 数组 数组总结 及 静态初始化一维数组 /* Array:1.java语言中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object ...

  8. 《Java JDK8学习笔记》读书笔记(4)

    第4章 认识对象 学习目标  区分基本类型与对象类型  了解对象与引用的关系  从打包器认识对象  以对象观点看待数组  认识字符串的特性 4.1 类与对象 第3章讲的都是基本类型,这一章开 ...

  9. JAVA SE 学习笔记

    笔记 一·Java程序基础 代码练习合集 1.Hello,world 2.BMI 3.Grade 4.InputNum 5.Gamecaiquan 6.Main 7.Reserve_arrays 8. ...

最新文章

  1. Micronaut教程:如何使用基于JVM的框架构建微服务
  2. POI之excel导入导出
  3. 14 图的基础知识-几种常用的存储结构
  4. java二次封装_基于OKhttp+Rxjava2+Retrofit进行二次封装
  5. python使用手册-Python参考手册(第4版)
  6. Normal Data Structure Tricks
  7. 红薯叶有什么营养价值?
  8. 百度大脑EasyMonitor升级2.0,全新发布软硬一体方案EM-BOX 边缘部署易集成
  9. (详解)11年真题:求两个序列合并后的的中位数
  10. Java基础面试题大全
  11. 等保 2.0 二级 VS 三级
  12. Ubuntu 22.04 下安装uhd和gnuradio的快捷方法
  13. 怎样用电脑收发短信?
  14. js中读取json对象
  15. Linux下自动化运维工具ansible
  16. python编写科学计算器_Python实现计算器
  17. java计算机毕业设计旅游网站源程序+mysql+系统+lw文档+远程调试
  18. java 利用飞信,Java利用飞信API给自己或者好友发信息
  19. python 有没有 hold on的用法
  20. .bashrc 文件

热门文章

  1. springCloud工作笔记090---SpringCloud_redis配置多数据源_redis多数据源
  2. JPA开发求助---JPA生成数据表的时候:log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotat
  3. multi-view face detection using deep convolutional neural networksz
  4. js 跳转传递汉字参数
  5. JAVA redis 常用函数
  6. linux共享内存变量 tiaojianbianliang,低压集抄系统中Linux共享内存使用分析
  7. 3d激光雷达开发(生成RangeImage)
  8. 嵌入式电路设计(linux soc电路设计)
  9. 一步一步写算法(之内存)
  10. tts android,Android系统自带的TTS实现语音播报