一、数组基本常见操作
1.1、静态初始化
//第一种声明
             //第一种声明
int [] arr=new int[5];
//第二种声明
int [] arr1=new int[]{5,3,8,1,9,11};
//或者
int [] arr2={5,3,8,1,9,11};
 

1.2、常见问题

下标越界
//声明数组
int [] array=new int[3];
System.out.println(array[3]); //最在元素下标为2,发生异常 数组下标越界 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

空指针

//声明数组
int [] array=new int[3];
array=null; //将数组设置为null
System.out.println(array[1]); //数组为空,发生空指针异常
Exception in thread "main" java.lang.NullPointerException
 
 
1.3、遍历
 
package com.day04;
/**
* 数组的遍历
* @author Administrator
*
*/
public class ArrayDemo1 { public static void main(String[] args) {
//声明数组
int [] array={5,8,1,2,6};
//遍历
for(int i=0;i<array.length;i++){
System.out.println("array["+i+"]="+array[i]);
} } }

结果:

array[0]=5
array[1]=8
array[2]=1
array[3]=2
array[4]=6

1.4、获取数组元素的值

package com.pb.demo1;

import java.util.Scanner;

/*
* 输入5个学生的成绩,并求出最高分,最低分,平均分
*/
public class Demo5 { public static void main(String[] args) {
//声明一个扫描器类似的变量
Scanner input = new Scanner(System.in);
//声明整形数组
int [] scores=new int [5];
System.out.println("请输入5个学生的成绩:成绩为整数");
//为数组赋值
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}
//总成绩
float sum=0;
//最低分
int min=0;
//最高分
int max=0;
//平均分
float avg=0;
//将第一个值赋为min和max,进行比较
min=scores[0];
max=scores[0];
for (int i = 0; i < scores.length; i++) {
//总成绩
sum=sum+scores[i];
//最低分
if(scores[i] < min){
min=scores[i];
}
//最高分
if(scores[i]>max){
max=scores[i];
} }
System.out.println("总成绩:"+sum);
System.out.println("最低分:"+min);
System.out.println("最高低:"+max);
System.out.println("平均分:"+sum/scores.length); } }

另一种 :用于打印数组中的元素,元素间用逗号隔开

package com.day04;
/**
* 定义功能,用于打印数组中的元素,元素间用逗号隔开
* @author Denny
*
*/
public class ArrayDemo2 { public static void main(String[] args) {
//声明数组
int [] arr={3,6,8,1,9,2,68,98,83};
printArray(arr);
}
//定义方法实现用于打印数组中的元素,元素间用逗号隔开
public static void printArray(int [] arr){ for(int x=0;x<arr.length;x++){
if(x==0){
System.out.print("{"+arr[x]+","); }else if(x==arr.length-1){
System.out.print(arr[x]+"}");
}else{
System.out.print(arr[x]+",");
} }
}
}

结果:

{3,6,8,1,9,2,68,98,83}

二、排序
2.1、冒泡排序
 
package com.day04;

/**
* 冒泡排序
*
* @author Denny
*
*/
public class ArrayDemo4 { public static void main(String[] args) {
int[] arr = { 5, 3, 1, 8, 4, 9, 11, 7 };
System.out.println("=======排序前======");
printArray(arr); System.out.println("\n=======排序后======");
bubbleSorte(arr); // 排序
printArray(arr); } // 冒泡排序
public static void bubbleSorte(int[] arr) { // 开始排序
for (int x = 0; x < arr.length - 1; x++) { for (int y = 0; y < arr.length - x - 1; y++) {
// 开始比较
if (arr[y] > arr[y + 1]) { // 交换
int tmp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = tmp;
}
} } } // 遍历数组
public static void printArray(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i != arr.length - 1) {
System.out.print(arr[i] + ",");
} else {
System.out.print(arr[i] + "]");
}
}
} }
结果:
=======排序前======
[5,3,1,8,4,9,11,7]
=======排序后======
[1,3,4,5,7,8,9,11]
 
2.2、选择排序
 
package com.day04;

/**
* 选择排序
*
* @author Denny
*
*/
public class ArrayDemo5 { public static void main(String[] args) { int[] arr = { 5, 3, 1, 8, 4, 9, 11 ,7};
System.out.println("=======排序前======");
printArray(arr); System.out.println("\n=======排序后======");
selectSort(arr); //排序
printArray(arr);
} // 选择排序
public static void selectSort(int[] arry) {
for (int i = 0; i < arry.length - 1; i++) { for (int j = i + 1; j < arry.length; j++) {
// 1和2比
if (arry[i] > arry[j]) {
// 交换
int tmp = arry[i];
arry[i] = arry[j];
arry[j] = tmp;
}
} } } // 遍历数组
public static void printArray(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1){
System.out.print(arr[i] + ",");
}else{
System.out.print(arr[i] + "]");
}
}
} }

结果:

=======排序前======
[5,3,1,8,4,9,11,7]
=======排序后======
[1,3,4,5,7,8,9,11]
 
2.3、二分法排序
package com.day04;

import java.util.Arrays;

/**
* 二分法查找
* @author Denny
*
*/
public class ArrayDemo6 { public static void main(String[] args) {
int[] arr = { 1,3,4,5,7,8,9,11};
//int index=getIndex(arr,11);
//使用Arrays.sort排序
Arrays.sort(arr);
//1,3,4,5,7,8,9,11
//二分法查找
//int index=halftSearch(arr,33);
int index=halftSearch_2(arr,9);
System.out.println("查找的index="+index); }
//二分法查找,前题,要排序过的数组
//先排序
public static int halftSearch(int [] arr,int key){
//最小下标
int min=0;
//最大下标
int max=arr.length-1;
//中间下标
int mid=(min+max)/2;
//循环
while(arr[mid]!=key){ if(key>arr[mid]){
min=mid+1;
}else if(key<arr[mid]){
max=mid-1;
}
//重新计算中间值下标
mid=(min+max)/2;
if(min>max){
return -1;
}
}
return mid;
}
//二分法查找,前题,要排序过的数组第二种写法
public static int halftSearch_2(int [] arr,int key){
//最小下标
int min=0;
//最大下标
int max=arr.length-1;
//中间下标
int mid ;
//循环
while(min<=max){
//重新计算中间值下标
mid=(min+max)>>1;
if(key>arr[mid]){
min=mid+1;
}else if(key<arr[mid]){
max=mid-1;
}else{
return mid;
} }
return -1; } //遍历查找
public static int getIndex(int[] arr,int key){
int index=-1; //定义-1下标
for (int i = 0; i < arr.length; i++) {
if(key==arr[i]){
index=i;
}
} return index;//返回下标变量 } }

2.4、示例

package com.day04;

/**
* 有一个有序的数组,想要将一个元素插入到这个数组中, 还要保证这个数组是有序的
*
* @author Denny 1.二分法查找到下标
*
*/
public class ArrayDemo7 { public static void main(String[] args) {
int arr[] = { 2, 4, 5, 7, 19, 32, 45 };
int index=getIndex(arr,35);
System.out.println("index="+index);
}
//二分法查找,返回能插入的下标
public static int getIndex(int[] arr, int key) {
int min = 0, max = arr.length - 1, mid;
while (min <= max) {
// 中间下标
mid = (min + max) >> 1;
if (key > arr[mid]) {
min = mid + 1;
} else if (key < arr[mid]) {
max = mid - 1; } else { return mid;
}
}
return min;
} }
三、进制
 
3.1、十进制-二进制和十六进制
package com.day04;

public class ArrayTest1 {

    public static void main(String[] args) {

        toBin(6);
toHex(60);
} /*
* 十进制转换十六进制
*
*/
public static void toHex(int num) {
StringBuffer sb = new StringBuffer();
for (int x = 0; x < 8; x++) {
int tmp = num & 15;
if (tmp > 9) {
//System.out.println((char) (tmp - 10 + 'A'));
sb.append((char) (tmp - 10 + 'A'));
} else {
//System.out.println(tmp);
sb.append(tmp);
}
num=num>>>4;
}
System.out.println(sb.reverse());
} /*
* 十进制转换为二进制
*/
public static void toBin(int num) {
StringBuffer sb = new StringBuffer();
while (num > 0) {
// System.out.println(num % 2);
sb.append(num % 2);
num /= 2;
}
System.out.println(sb.reverse());
}
}

3.2、查表法

 
package com.day04;

public class ArrayTest2 {

    public static void main(String[] args) {
toHex(60);
} /*
* 0 1 2 3 4 5 6 7 8 9 A B C D E F --十六进制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
* 15 -----数组下标 查表法:将所有的元素临时存储起来,建立对应关系 每一次,&15后的值作为索引去查建立好的表,就可以找到对应的元素
* 这样比-10+'A'简单 这个表怎么建立? 可以通过数组的形式来定义 结果是反着的,想要正过来可以通过StringBuffer reerse功能
* 可以使用数组来完成
*/
public static void toHex(int num) {
// 十六进制数组
char[] ch = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; // 定义临时容器数组
char[] arr = new char[8];
int pos=arr.length;//下标
while (num != 0) {
int tmp = num & 15;
// System.out.println(ch[tmp]);
arr[--pos] = ch[tmp];
num = num >>> 4;
}
System.out.println("post="+pos);
// 遍历输出
for (int i = pos; i <arr.length; i++) { System.out.print(arr[i] + " ");
}
}
}
查表法十进制转二进制
package com.day04;
/**
* 十进制 转2进制
* @author Administrator
*
*/
public class ArrayTest3 { public static void main(String[] args) {
toBin(-6); }
/*
* 十进制 转2进制
*/
public static void toBin(int num){
char [] ch={'0','1'}; //要查的表
//存储数组
char[] bin=new char[32];
//下标指针
int pos=bin.length;
while(num!=0){
int tmp=num&1;
bin[--pos]=ch[tmp];
num=num>>>1;
} //输出
for (int i = pos; i < bin.length; i++) {
System.out.print(bin[i]);
}
} }

最终完成

package com.day04;

/**
* 转换
*
* @author Denny
*
*/
public class ArrayTest4 { public static void main(String[] args) { //toBin(-6);
toOtc(60);
//toHex(-60);
}
/*
* 十进制---》二进制
*/
public static void toBin(int num){
toTrans(num,1,1);
} /*
* 十进制---》八进制
*/
public static void toOtc(int num){
toTrans(num,7,3);
}
/*
* 十进制---》十六进制
*/
public static void toHex(int num){
toTrans(num,15,4);
}
/*
* 提供公有的转换方法 num 要转换的数 base与上的数如15,1,7, offset 移动的倍数
*/
public static void toTrans(int num, int base, int offset) { if(num==0){
System.out.println(num);
return;
} // 十六进制数组
char[] ch = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; // 存储转换后的数组
char[] arr = new char[32];
int pos = arr.length;
while (num != 0) {
int tmp = num & base;// 取
arr[--pos] = ch[tmp]; // 查表取相对应的字符
num = num >>> offset; // 右移 }
//遍历输出
for (int i = pos; i < arr.length; i++) {
System.out.print(arr[i]);
} } }
四、二维数组
4.1、二维数组定义
格式一:
int[][] arr=new int [3]][2];
定义名称为arr的二维数组
二维数组中有3个一维数组
每个一维数组中有2个元素
一维数组名称分另为arr[0],arr[1],arr[2]
给第一个一维数组1下标标赋值78写法arr[0][1]=78;
格式二:
int [][] arr=new int [3][];
二维数组中有3个一维数组
每一个一维数组的默认初始化值null
可以对这个三个一维数组分另进行初始化
arr[0]=new int [3]
arr[1]=new int [1]
arr[2]=new int [2]
4.2、练习和常用操作
 
遍历
package com.day04;
/**
* 二维数组常用操作
* @author Denny
*
*/
public class ArrayTest5 { public static void main(String[] args) {
int [] [] arr={{3,5,7,8,1},{2,1,6},{5,7,9}};
//遍历
printArr(arr);
} /*
* 二维数组遍历
*/
public static void printArr(int [] [] array){
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println();
}
} }

 

基础学习day04---数组的操作的更多相关文章

  1. Scala学习(三)----数组相关操作

    数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...

  2. Java基础学习之数组基本属性和方法

    数组对于每一门编程语言都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同.Java语言中提供的数组是用来存储固定大小的同类型元素.你可以声明一个数组变量,如 int[100] 来代替直接 ...

  3. JavaScript基础学习(三)—数组

    一.数组简介     JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可 ...

  4. 零基础学习C语言字符串操作总结大全

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...

  5. Java基础学习(二)—数组

    一.数组的概念 定义: 数组是存储同一种数据类型的多个元素的集合. 数组既可以存储基本数据类型,也可以存储引用数据类型. 格式: 格式1: 数据类型[] 数组名; 格式2: 数据类型 数组名[]; 这 ...

  6. java基础学习总结——数组

    一.数组的基本概念 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量. 数组的元素可以是任何数据类型,包括基 ...

  7. PHP学习之数组Array操作和键值对操作函数(一)

    PHP 中的数组实际上是一个有序映射.映射是一种把 values关联到 keys 的类型.此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合, ...

  8. Python基础学习8---list列表的操作

    a_list = ['hello','world',1,'shanghai',3.99] #列表添加操作的4种方法 #1. 通过+ 字符来拼接 a_list = a_list + [1,'wuhan' ...

  9. mongodb基础学习13-聚集aggregate操作

    aggregate可以用的操作与sql的对应关系 下面来看具体操作例子: 分组求和: 求总记录数 商品价格大于50记录分组求和 商品价格大于50且分组记录大于2的分组记录条件 分组库存数,并按库存排序 ...

随机推荐

  1. [转]Visual Studio技巧之打造拥有自己标识的代码模板

    可能经过很多博客的介绍,大家都知道代码段的使用,使用代码段可以很方便地生成一些常用的代码格式,确实对我们开发很方便.在团队开发中或者在某些情况下我们经常可能还会希望使用Visual Studio生成的 ...

  2. undefined symbol libiconv_open 完全解决方案

    我在另一篇关于Ubuntu+Sendmail+Dovecot+Openwebmail 邮件服务器搭建完全解决方案文章完成后,我的邮件服务器也搭建完成了, 事实上也正在运行中, 但是有网友依据我的操作步 ...

  3. (转)Netfilter分析

    看到一篇讲Netfilter框架的,如果有一点基础了的话对于捋清整个框架很好帮助,转下来细细阅读. 转自http://aichundi.blog.163.com/blog/static/7013846 ...

  4. form表单action提交表单,页面不跳转且表单数据含文件的处理方法

    在最近的项目中需要将含 input[type='file']的表单提交给后台 ,并且后台需要将文件存储在数据库中.之前所用的方法都是先将文件上传到七牛服务器上,然后七牛会返回文件的下载地址,在提交表单 ...

  5. bootstrap插件学习-bootstrap.alert.js

    我们先看bootstrap.alert.js的结构 var dismiss = '[data-dismiss="alert"]' //自定义属性 Alert = function ...

  6. [Tool] PLSQL使用技巧

    1.PL/SQL Developer保存自定义界面布局 Tools->Preferences->User Interface->Options->Autosave deskto ...

  7. sprint3与总结

    backlog-看板-燃尽图-每日立会 github:https://github.com/alfredzhu/team-work 总结:这种团队合作的方式很好,大家在一起沟通,相互交流想法,一起解决 ...

  8. 在做excel导出时如何将excel直接写在输出流中

    之前做excel导出时,我都是先将文件写在服务器上,然后再下载下来,后来发现原来可以直接将文件写在输出流里边. 下面是一个小demo: package com.huaqin.fcstrp.util; ...

  9. .net4.0注册到IIS ,重新注册IIS ,iis注册

    IIS和.netfw4.0安装顺序是从前到后,如果不小心颠倒了,无所谓. 打开程序-运行-cmd:输入一下命令重新注册IIS C:\WINDOWS\Microsoft.NET\Framework\v4 ...

  10. [PE结构分析] 10.基址重定位

    源代码如下: typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; DWORD SizeOfBlock; // WORD Type ...