基础学习day04---数组的操作
//第一种声明
//第一种声明
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
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]+",");
} }
}
}
结果:
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]
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]
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;
} }
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]);
} } }
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---数组的操作的更多相关文章
- Scala学习(三)----数组相关操作
数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...
- Java基础学习之数组基本属性和方法
数组对于每一门编程语言都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同.Java语言中提供的数组是用来存储固定大小的同类型元素.你可以声明一个数组变量,如 int[100] 来代替直接 ...
- JavaScript基础学习(三)—数组
一.数组简介 JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可 ...
- 零基础学习C语言字符串操作总结大全
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...
- Java基础学习(二)—数组
一.数组的概念 定义: 数组是存储同一种数据类型的多个元素的集合. 数组既可以存储基本数据类型,也可以存储引用数据类型. 格式: 格式1: 数据类型[] 数组名; 格式2: 数据类型 数组名[]; 这 ...
- java基础学习总结——数组
一.数组的基本概念 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量. 数组的元素可以是任何数据类型,包括基 ...
- PHP学习之数组Array操作和键值对操作函数(一)
PHP 中的数组实际上是一个有序映射.映射是一种把 values关联到 keys 的类型.此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合, ...
- Python基础学习8---list列表的操作
a_list = ['hello','world',1,'shanghai',3.99] #列表添加操作的4种方法 #1. 通过+ 字符来拼接 a_list = a_list + [1,'wuhan' ...
- mongodb基础学习13-聚集aggregate操作
aggregate可以用的操作与sql的对应关系 下面来看具体操作例子: 分组求和: 求总记录数 商品价格大于50记录分组求和 商品价格大于50且分组记录大于2的分组记录条件 分组库存数,并按库存排序 ...
随机推荐
- Git 文件比较
Git 的三个作业场: 工作区(Work Tree) 项目根目录下 .git 目录以外所有区域,是编辑项目文件的地方. 缓存区(Index) 工作区文件必须先保存在缓存区,之后从缓存区保存到仓库. 仓 ...
- [SLAM] 01 "Simultaneous Localization and Mapping" basic knowledge
发信人: leecty (Terry), 信区: ParttimeJobPost标 题: 创业公司招SLAM 算法工程师发信站: 水木社区 (Thu Jun 16 19:18:24 2016), 站内 ...
- node.js JS对象和JSON字符串之间的转换
JSON.stringify(obj)将JS对象转为字符串. var json = { aa: ['sdddssd'], bb: [ '892394829342394792399', '23894 ...
- Android 学习笔记之SurfaceView的使用+如何实现视频播放...
学习内容: 1.掌握Surface的使用... 2.Android中如何实现视频播放... 1.SurfaceView类的使用 在Android中,一般播放音频时我们可以去使用Android提供的 ...
- 基于.NET C#的 sqlite 数据库 ORM 【Easyliter】
因为工作原因经常用到SQLITE数据库,但又找不到好用的ORM所以自个整理了一个简单好用的轻量极ORM框架:Easyliter 功能介绍: 1.支持SQL语句操作 2.支持 List<T> ...
- CSS3的变形transform、过渡transition、动画animation学习
学习CSS3动画animation得先了解一些关于变形transform.过渡transition的知识 这些新属性大多在新版浏览器得到了支持,有些需要添加浏览器前缀(-webkit-.-moz-.- ...
- SQL Server中的连接查询【内连接,左连接,右连接,。。。】
在查询多个表时,我们经常会用“连接查询”.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据 ...
- 在Linux上安装Oracle RAC 12 c(12.1) 虚拟机,一步一步向导
Oracle RAC 12 c(12.1)在Linux上安装虚拟机,一步一步向导 今天我们将看到如何安装 12 c版本1 RAC(真正的应用程序集群)数据库2 Linux 64位的虚拟机 使用VMWa ...
- DataTable 获取列名 DataTable批量更新至数据库
好久没写东西了,这几个月也没下功夫钻研技术,愧疚啊.说下最近刚学会的DataTable 的用法吧,新手适合看下. 1 DataTable 获取列名 在处理数据的时候大家都会用到模型,从datatabl ...
- sql添加合计
在项目中发现有这样的写法 SELECT ZoneID,CountSQAZFZSBJZ3G+CountSQGZJRJZSL3G AS column1FROM G3MulticarrierSiteCove ...