5.2一维数组:点
数组简单的认为是很多格子
5.2.1如何去定义数组:上面先括号+数组名比较常用
5.2.2 分配内存并进行初始化
怎么对元素进行赋值,a中有三个元素
错误:数组下标越界,超出赋值长度
解决方法:重新赋值分配a,或者将多赋值删掉,注意for循环里条件
(或者用a.length)/(for循环,注意冒号)
1.
2.
public class Fiveone {
public static void main(String[] args) {
// TODO Auto-generated method stub
//申明一维数组
int[] a;//先括号在加数组名
char b[];//先数组名在加括号
//分配内存
a =new int[4];//需要的内存
//分配内存的同时进行初始化值
b = new char[] {'a','b','c'};//给b分配3个内存
a[0]=1;//给a中元素赋值
a[1]=2;//a中有三个元素
a[2]=3;
a[3]=4;
//数组的遍历,数组的长度是几个i<几
for(int i=0;i<b.length;i++) {//a赋值
int temp=a[i];//定义temp存放a
System.out.println(temp);
}
for(int temp : a) {
System.out.println(temp);
}//for循环遍历数组 5.4.1
}
}
public class Fiveone {
public static void main(String[] args) {
// TODO Auto-generated method stub
//申明一维数组
int[] a;//先括号在加数组名
char b[];//先数组名在加括号
//分配内存
a =new int[4];//需要的内存
//分配内存的同时进行初始化值
b = new char[] {'a','b','c'};//给b分配3个内存
/*a[0]=1;//给a中元素赋值
a[1]=2;//a中有三个元素
a[2]=3;
a[3]=4;*/
b[0]='a';
b[1]='b';
b[2]='c';
//数组的遍历,数组的长度是几个i<几
for(int i=0;i<b.length;i++) {//a赋值
char temp=b[i];//定义temp存放a
System.out.println(temp);
}
for(char temp : b) {//冒号隔开,前:数据类型;后:数组名
System.out.println(temp);
}//for循环遍历数组
}
}
5.3.1:二维数组 :面
单个格子赋值
public class Fiveone {
public static void main(String[] args) {
//申明二维数组
int[] [] a;
char b[] [];//地址指向另一个数组
//分配内存
a =new int[4][3];//4列3行
b = new char[][] {{'z','h'},{'h','z'},{'h','z','d'}};//2*2,这时就会变成3*3
//分配内存的同时进行初始化值
a[0]=new int[] {1,2,3};
a[1]=new int[] {4,5,6};
a[2]=new int[] {7,8,9};
a[3][0] =10;
a[3][1] =11;//给单个格子赋值
a[3][2] =12;
for(int i=0;i<a.length;i++) {//a赋值
int[] temp=a[i];//定义temp存放a
for(int j=0;j<temp.length;j++) {//再次遍历
System.out.println(temp[j]);
}
System.out.println();
}
for(char[] temp : b) {//冒号隔开,前:数据类型;后:数组名
for(char c:temp ) {//再次遍历
System.out.println(c);
}
System.out.println();
}//for循环遍历数组
}
}
例题5.1
public class GetDay {
public static void main(String[] args) {
// TODO Auto-generated method stub
int day[]=new int[] {31,28,31,30,31,30,31,31,30,31,30,30
};
for(int i=0;i<12;i++) { //循环
System.out.println((i+1)+"月有"+day[i]+"天"); //输出每有天数
}
}
}
例题5.2
public class Ma { //创建类
public static void main(String[] args) { //主方法
// TODO Auto-generated method stub
int a[][] = new int[3][4]; //创建二维数组
for(int i = 0;i<a.length;i++) {
for(int j=0;j<a[i].length;j++) { //循环遍历数组中的每个元素
System.out.print(a[i][j]); //将数组中的元素输出
}
System.out.println(); //输出空格
}
}
}
例题5.3
public class Ta {
public static void main(String[] args) {
// TODO Auto-generated method stub
int b[][] = new int[][] {{1},{2,3},{4,5,6}}; //定义二维数组
for(int k=0;k<b[k].length;k++) { //外循环循环一行
for(int c =0;c<b[k].length;c++) { //循环遍历二维数组中的每个元素
System.out.print(b[k][c]); //将数组中的元素输出
}
System.out.println(); //输出空格
}
}
}
5.4:数组的基本操作
例题5.4
public class Tautog {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr2[][]= {{4,3},{1,2}}; //定义二维数值赋初始值
System.out.println("数组中的元素:");//输出值
int i=0; //外层循环计数器变量,赋值为零
for(int x[]:arr2) { //外层循环变量变一维数组 for循环
i++;
int j=0;
for(int e:x) { //内层循环计数器变量
j++;
if(i==arr2.length&&j==x.length) { //判断变量是二维数组中的最后一个元素,第二行第二列数字输出
System.out.print(e); //输出二位数组最后一个元素,优化判断
}else //如果不是
System.out.print(e+"、"); //输出
}
}
}
}
5.4.2:填充替换数组元素
数组中的元素定义完成后,可通过Arrays类的静态方法fill()对数组中元素进行替换
Arrays.fill(数组名,值);
例题5.5
import java.util.Arrays;
public class Fivetwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] =new int[5];//创建int数组
Arrays.fill(arr, 9);//使用同一个值进行填充,最后输出为9
for(int i=0;i<arr.length;i++) {
System.out.println("第"+i+"个元素是:"+arr[i]);//将元素输出
}
}
}//例题5.5
替换数组的部分元素(前索引值改后索引值不改)
Arrays.fill(数组名,前索引,后索引,值);前索引和后索引的值
例题5.6
import java.util.Arrays;
public class Fivetwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] =new int[] {45,12,2,10};//创建int数组
Arrays.fill(arr, 1,2,8);//使用fill静态替换指定范围内的元素
for(int i=0;i<arr.length;i++) {
System.out.println("第"+i+"个元素是:"+arr[i]);//将元素输出
}
}
}//例题5.6
按住ctrl键查看fill源码
5.4.3:对数组进行排序
Arrays.soft(数组名)
例题5.7
import java.util.Arrays;
public class Fivetwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] =new int[] {23,42,12,8};//创建int数组
Arrays.sort(arr);//使用sort进行排序
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);//将元素输出
}
}
}//例题5.7
5.4.4:复制数组(空位补0,溢出去掉)
新数组名= Arrays.copyOf(旧的数组名,新数组长度);多种重载形式,类型多样
import java.util.Arrays;
public class Fivetwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] =new int[] {23,42,12};//创建int数组
int newarr[]=Arrays.copyOf(arr,5);//创建新的数组并复制,长度有五位
for(int i=0;i<newarr.length;i++) {
System.out.println(newarr[i]);//将新元素输出
}
}
}//例题5.8
当新数组长度为五,比旧的数组长,空位补零
当新数组长度为二,比旧的数组短,取该有的位置,溢出去掉,按顺序去掉
import java.util.Arrays;
public class Fivetwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] =new int[] {23,42,12};//创建int数组
int newarr[]=Arrays.copyOf(arr,2);//创建新的数组并复制
for(int i=0;i<newarr.length;i++) {
System.out.println(newarr[i]);//将新元素输出
}
}
}//例题5.8
5.4.4.2复制数组的部分元素 copyOfRange(的数组名,前索引,后索引,新数组长度);
import java.util.Arrays;//导入java..Arrays
public class Fivetwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] =new int[] {23,42,12,84,10};//创建int数组
int newarr[]=Arrays.copyOfRange(arr,0,3);//创建新的数组并复制
for(int i=0;i<newarr.length;i++) {//遍历
System.out.println(newarr[i]);//将新元素输出
}
}
}//例题5.9
5.4.5:查询数组(先排序后查询)
索引=Arrays.binarySearch(数组名,元素);
import java.util.Arrays;//导入java..Arrays
public class Fivetwo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int ia[] =new int[] {1,8,9,4,5};//创建int数组
Arrays.sort(ia);//数组排序
int index = Arrays.binarySearch(ia, 4);//查找4的位置
System.out.println("4的索引位置是:"+index);//将索引输出
}
}
//例题5.10
数组如果不进行排序
索引值会变成负数
5.4.5.2(前索引含后索引不含)
索引=Arrays.binarySearch(数组名,前索引,后索引,元素);
例题5.11
import java.util.Arrays;//导入java.utill.Arrays
public class Fivetwo {
public static void main(String[] args) {
String str[]=new String []{"ab","cd","ef","yz"};//创建str数组
Arrays.sort(str);//数组排序
int index = Arrays.binarySearch(str,0,2,"cd");//查找cd的位置
System.out.println("cd的索引位置是:"+index);//将索引输出
}
}
//例题5.11
前索引可以找到在区间内
import java.util.Arrays;//导入java.utill.Arrays
public class Fivetwo {
public static void main(String[] args) {
String str[]=new String []{"ab","cd","ef","yz"};//创建str数组
Arrays.sort(str);//数组排序
int index = Arrays.binarySearch(str,0,2,"ab");//查找cd的位置
System.out.println("ab的索引位置是:"+index);//将索引输出
}
}
//例题5.11
后索引不包含在区间
import java.util.Arrays;//导入java.utill.Arrays
public class Fivetwo {
public static void main(String[] args) {
String str[]=new String []{"ab","cd","ef","yz"};//创建str数组
Arrays.sort(str);//数组排序
int index = Arrays.binarySearch(str,0,2,"ef");//查找cd的位置
System.out.println("ef的索引位置是:"+index);//将索引输出
}
}
//例题5.11
5.5 数组排序算法
5.5.1冒泡排序
它排序数组元素的过程总是在将小的数往上放,较大的竖往后放类似于水中气泡往上升的动作,所以称为冒泡排序。
5.5.2、直接排序
选择排序也叫直接排序,它的排序速度比冒泡排序要快一些。
5.5.3、反转排序
就是以相反的排序,把原有的数组内存重新排序。反转排序的基本思想比较简单,把数组的最后1个元素和第1个元素替换,倒数第2个元素与第2个元素替换,以此类推。