在内存内开辟一组连续空间来存值叫数组.
数组名,数据类型,元素,索引(下标).
同一个数组中,元素的数据类型相同的;不同的数组数据类型可以是java中任意类型.
数组的索引从0开始.
数组名[索引].
数组一但分配了空间,它的长度是固定的.
数组的长度:数组名.length
数组的索引范围在:0~数组名.length-1
数组的索引如果超过范围报:ArrayIndexOutOfBoundsException
数组只要分配空间就可以使用.
数组如果分配空间后,不赋值有默认值:
String类型数组,默认值null
int类型数组,默认值0
double类型数组,默认值0.0
char类型数组,默认值/u0000,在window系统上看着像空格
boolean类型数组,默认值false
数组如果直接输出,输出的是内存地址.
数据类型[] 数组名;(推荐)
数据类型 数组名[];
eg://声明数组,存学生姓名
String[] studentNames;
//声明数组,存学生年龄
int studentAges[];
给已经声明的数组分配空间:
数组名=new 数据类型[长度];
在声明数组的同时分配空间语法:
数据类型[] 数组名=new 数据类型[长度];
数据类型 数组名[]=new 数据类型[长度];
//eg://给已经声明的数组分配空间
studentNames=new String[3];
studentAges=new int[3];
//在声明数组的同时赋值,存学生身高
double[] studentHeight=new double[4];
适用于所有数组.
注意: 只有分配空间的数组,才可以使用动态赋值.
动态赋值的语法:数组名[索引]=值;
//eg://给数组动态赋值
studentNames1[0]="张三";
studentNames1[1]="李四";
studentNames1[2]="王五";
适用于对数组中元素已知的情况.
数据类型[] 数组名=new 数据类型[]{值1,值2…};
可以写成:
数据类型[] 数组名;
数组=new 数据类型[]{值1,值2…};
eg://声明数组的同时,静态赋值
String[] studentNames2=new String[] {"赵六","钱七","老王","马云"};
int[] studentAges2;
studentAges2=new int[] {17,18,19};
数据类型[] 数组名={值1,值2…};
eg:double[] studentHeight2= {1.7,1.8,1.9};
遍历:访问数组中每个空间的元素的值.
//eg://用for循环遍历数组
for(int i=0;i
只用于访问数组和集合中每个元素.
语法:
for(数据类型 别名:数组/集合){
}
注意: 别名指代当前遍历集合中当前元素.数据类型指代遍历每个元素的类型.
eg://用增强for循环遍历
for (String stu : studentNames2) {
System.out.println(stu);
}
声明一个新数组,长度大于原数组,将原数组的元素复制过来.
//eg:/*第一种:将原数组长度扩容到5*/
//声明一个长度为5新数组
int[] nums2=new int[5];
//将原数组的元素复制新数组中
for (int i = 0; i < nums1.length; i++) {
nums2[i]=nums1[i];
}
Arrays.copyOfRange(原数组,起始索引,终止索引);不包含终止索引
//将原数组的元素复制到新数组,复制时原数组的长度不够,补默认值.
int[] nums3=Arrays.copyOfRange(nums1, 0, 5);
Arrays.copyOf(原数组, 长度);
/*第三种:将原数组长度扩容到5*/
int[] nums4=Arrays.copyOf(nums1, 5);
参数个数可以是0个到多个.
语法:
数据类型…参数;
//eg:
public class VariableElement {
public static void main(String[] args) {
//调用方法
double result1=sum();
double result2=sum(11.1,3.14,33);
//动态参数的实参可以直接传数组
double[] count= {33,11,77};
double result3=sum("aa",count);
System.out.println("结果为:"+result3);
}
/**
* 动态参数的使用方法
* @param num 动态参数
* @return 数字之和
*/
public static double sum(double...num) {
//声明一个变量存总和
double sum=0;
//在方法中将动态参数作为数组用
for (int i = 0; i < num.length; i++) {
sum=sum+num[i];
}
return sum;
}
/**
* 动态参数的使用方法
* @param num 动态参数
* @return 数字之和
*/
public static double sum(String name,double...num) {
System.out.println(name+"正在计算中...");
//声明一个变量存总和
double sum=0;
//在方法中将动态参数作为数组用
for (int i = 0; i < num.length; i++) {
sum=sum+num[i];
}
return sum;
}
}
//eg:
public static void main(String[] args) {
//准备一个数组
int[] nums= {5,8,1,7,6,3};
//声明一个变量存最大值,默认数组第一个空间是最大值
int max=nums[0];
//声明一个变量存最小值,默认数组第一个空间是最小值
int min=nums[0];
//数组中其他元素依次与最大值或最小值比较
for (int i = 1; i < nums.length; i++) {
//求最大值
if(maxnums[i]) {
min=nums[i];
}
}
System.out.println("数组中最大值 为:"+max);
System.out.println("数组中最小值 为:"+min);
}
第一轮从第一个元素开始两两比较,比到最后一个数,每轮比出当前所有数中最大值或最小值,下一轮又从第一个元素开始两两比较,比出剩下数中最大值或最小值,依次类推.
//eg:
public static void main(String[] args) {
//准备一个数组
int[] nums= {5,8,1,7,6,3};
System.out.println("排序前原数组为:");
for (int n: nums) {
System.out.print(n+",");
}
System.out.println();
/*冒泡排序*/
//外层循环控制比较轮数
for(int i=0;i
第一轮从第一个元素开始依次与后面每个元素比较,比到最后一个数,每轮比出当前所有数中最大值或最小值,下一轮又从剩下数中第一个元素开始依次与后面每个元素比较,比到最后一个数,比出剩下数中最大值或最小值,依次类推.
//eg:
public static void main(String[] args) {
//准备一个数组
int[] nums= {5,8,1,7,6,3};
System.out.println("排序前原数组为:");
for (int n: nums) {
System.out.print(n+",");
}
System.out.println();
/*选择排序*/
//外层循环控制轮数,i表达轮数
for(int i=0;i
Arrays.sort(数组名);默认升序排序.
eg:public static void main(String[] args) {
// 准备一个数组
int[] nums = {5, 2,5,5, 8, 1, 7, 6, 3 };
//将数组转换为字符串输出
System.out.println("排序前原数组为:"+Arrays.toString(nums));
//jdk中Arrays自带的方法排序
Arrays.sort(nums);
//将数组转换为字符串输出
System.out.println("排序后数组为:"+Arrays.toString(nums));
//获得具有从键盘上接收数据的能力
Scanner input=new Scanner(System.in);
System.out.println("请输入一个正整数:");
int find=input.nextInt();
//用二分查找法判断已经排好序的数组中是否包含输入要查找的数
//将当前数列中mid= (最大索引+最小索引)/2
//如果find>nums[mid],下次(最大索引+mid+1)/2
//如果find=0) {
System.out.println("数组中包含要查找的数:"+find+",它在数组中位置为:"+index);
}else {
System.out.println("数组中查无此数!");
}
//声明一个数组,给数组统一赋值
int[] nums2=new int[5];
Arrays.fill(nums2, 6);
System.out.println("数组为:"+Arrays.toString(nums2));
}
题目:随机生成一个两位数,从键盘上接收你猜的数,如果猜对了,就不用再猜,如果猜错了,告诉猜大了,还是猜小了,然后接着猜,直到猜对了就不用再猜?
注意://生成随机两位数
int num=(int)(Math.random()*90+10);
在内存开辟一段连续的空间,每个空间存一个数.
在内存开辟一段连续的空间,每个空间存一个一维数组.
在内存开辟一段连续的空间,每个空间存一个(n-1)维数组.
String类型数组,默认值null
int类型数组,默认值0
double类型数组,默认值0.0
char类型数组,默认值/u0000,在window系统上看着像空格
boolean类型数组,默认值false
数据类型[][] 数组名;(推荐)
数据类型 数组名[][];
eg://声明二维数组
String[][] studentNames1;
int studentAges1[][];
二维数组的空间的长度一定要分配,每个一维数组的长度可以统一分 配,也可单独分配(当二维数组中每个一维数组的长度不相同).
eg://对已声明二维数组分配空间
studentNames1=new String[3][2];
//eg:studentAges1=new int[3][];
//给二维数组的每个一维数组单独分配空间
//studentAges1[0]就是一维数组
studentAges1[0]=new int[3];
studentAges1[1]=new int[2];
studentAges1[2]=new int[1];
eg;//声明二维数组的同时分配空间
String[][] studentNames2=new String[2][3];
//eg://给二维数组分配空间
int[][] studentAge2=new int[3][];
//单独为每一个一维数组分配空间
studentAge2[0]=new int[1];
studentAge2[1]=new int[2];
studentAge2[2]=new int[3];
当数组中元素已知
数据类型[][] 数组名=new 数据类型[][]{{值11,值12},{值21}…};
数据类型[][] 数组名={{值11,值12},{值21}…};
//eg://声明数组的同时静态赋值
String[][] studentNames3=new String[][] {{"黄国栋","赖盛豪"},{"陈健"}};
int[][] studentAges3= {{18,16},{15}};
适用于所有情况.
//eg://给数组动态赋值
studentNames2[0][0]="张三1";
studentNames2[0][1]="张三2";
studentNames2[1][0]="李四1";
studentNames2[1][1]="李四2";
eg:/*用嵌套for循环遍历*/
//外层循环遍历二维数组,i二维数组的索引
for (int i = 0; i < studentNames3.length; i++) {
//内层循环遍历每个一维数组每个空间,j一维数组的索引
for (int j = 0; j < studentNames3[i].length; j++) {
System.out.print(studentNames3[i][j]+",");
}
System.out.println();
}
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
/*用嵌套增强版for循环遍历*/
//外层遍历的二维数组
for (int[] ages : studentAges3) {
//内层循环遍历每个一维数组
for (int a : ages) {
System.out.print(a+",");
}
System.out.println();
}
System.out.println("---------------------------------------------");
/*用for循环配合Arrays.toString()历*/
for (int i = 0; i < studentAges3.length; i++) {
System.out.println(Arrays.toString(studentAges3[i]));
}
//eg:
public static void main(String[] args) {
//获得具有从键盘上接收数据的能力
Scanner input=new Scanner(System.in);
System.out.println("请输入杨辉三角行数:");
int row=input.nextInt();
if (row>0) {
//声明一个二维数组存杨辉三角
int[][] nums=new int[row][];
/*初始化杨辉三角*/
//外层循环控制行数
for (int i = 0; i < nums.length; i++) {
//先给二维数组每个一维数组分配空间
nums[i]=new int[i+1];
//内层循环控制一维数组中每个值
for (int j = 0; j < nums[i].length; j++) {
//如果是当前行的第一个数或最后一个数,值为1
if (j==0||j==nums[i].length-1) {
nums[i][j]=1;
}else{
nums[i][j]=nums[i-1][j]+nums[i-1][j-1];
}
}
}
//输出杨辉三角
for (int[] ns : nums) {
for (int n : ns) {
System.out.print(n+"\t");
}
System.out.println();
}
} else {
System.out.println("你输入的行数有误!");
}
}
/**注释内容 */,只能用类,方法成员变量的前面.
生成javadoc文档:package explore中选中项目-》鼠标右键-》export-》java/javadoc-》下步-》选中要生成文档注释的项目,同时在destination后面选择 文档生成的目的地-》下一步,下一步-》在vm option选择下写字符编码-encoding UTF-8 -charset UTF-8 -》下一步,点完成。
java中运行出错叫异常,bug,调试错误叫debug.
个人笔记,思路,仅供参考