数组
有点像批量定义变量的说法。
定义数组
三种方式:
- 静态赋值:在定义的同时初始化
- 静态赋值:在定义的同时初始化,还能重复赋值
- 动态赋值:知道数组的长度,元素为默认量
数组的遍历/迭代:集体给数组赋值
代码说明1
public class Demo01Init {
public static void main(String[] args) {
int a = 10;
// 静态赋值
int[] arr1 = {12,2,4,5};
//静态赋值
int[] arr2 = new int[] {1,2,3,4};
arr2 = new int[] {2,3,4};
//动态赋值
int[] arr3 = new int[5];//10,20,30,40,50
//数组的遍历/迭代
for(int i = 0; i < arr3.length; i++) {
arr3[i] = (i+1) * 10;
System.out.println(arr3[i]);
}
}
}
代码说明2
import java.util.Arrays;
//定义一个长度为10的数组,求数组的最大值,最小值,平均值
public class Deom01 {
public static void main(String[] args) {
int[] arr = new int[10];
for(int a = 0;a<arr.length;a++) {
arr[a] = (int)(Math.random()*100);
}
System.out.println(Arrays.toString(arr));
int max = arr[0];
int min = arr[0];
int sum = arr[0];
for(int a = 0;a<arr.length;a++) {
//最大值
if(arr[a] > max) {
max = arr[a];
}
//最小值
if(arr[a] < min) {
min = arr[a];
}
//求和
sum += arr[a];
}
System.out.println("max="+ max);
System.out.println("min="+ min);
System.out.println("avg="+ sum/arr.length);
}
}
代码说明3
import java.util.Arrays;
//把数组中的最大值,添加到末尾(数组的扩容)
//长度一旦确定就不可以改变
public class Deom02 {
public static void main(String[] args) {
int[] arr = new int[10];
int[] brr = new int[11];
for(int a = 0;a<arr.length;a++) {
arr[a] = (int)(Math.random()*100);
}
System.out.println("arr="+Arrays.toString(arr));
int max = arr[0];
for(int a = 0;a<arr.length;a++) {
//最大值
if(arr[a] > max) {
max = arr[a];
}
}
System.out.println("max="+ max);
System.arraycopy(arr, 0, brr, 0, arr.length);
//1.需要复制的原数组
//2.复制开始原数组的下标
//3.复制到的新数组
//4.新数组开始的下标
//5.复制的元素长度
System.out.println("brr="+Arrays.toString(brr));
brr[brr.length-1] = max;//将最大值赋值给新数组最后一位
System.out.println("brr="+Arrays.toString(brr));
}
}
代码说明4
import java.util.Arrays;
/*
* 生成一套双色球号码
* 红球:1~33随机,生成5个号码并且不能重复(按照升序排序)
* 篮球:1~16随机,生成1个号码并加到数组的最后
* */
public class Deom03 {
public static void main(String[] args) {
int red[] = new int[5];//红球
int r = red[0];
int blue[] = new int[1];//篮球
int arr[] = new int[6];
for(int i = 0;i<red.length;i++) {
red[i] = (int)(Math.random()*33)+1;//这里加1是为了随机数从1开始到33
if(red[i] != r) {
r = red[i];
}else {
r = red[i]-1;
}
}
Arrays.sort(red);//按顺序输出
System.out.println(Arrays.toString(red));
for(int j = 0;j<blue.length;j++) {
blue[j] = (int)(Math.random()*16)+1;//这里加1是为了随机数从1开始到16
}
System.out.println(Arrays.toString(blue));
System.arraycopy(red, 0, arr, 0, red.length);//将红球数组赋值给新数组
System.out.println(Arrays.toString(arr));//6位且最后一位为0
arr[arr.length-1]=blue[blue.length-1];//将篮球赋值给新的数组的最后一位
System.out.println(Arrays.toString(arr));
}
}
关于JVM
方法
public static void main(String[ ] args) { }
修饰符 + 返回值类型 + 方法名 + 方法参数 + 方法体
代码说明1
import java.util.Scanner;
/*
* 定义一个方法,该方法能够找出三个整数中的最大值并返回
* 在主方法中调用方法测试执行
*
* */
public class Demo04 {
public static void main(String[] args) {
int m = max(25,88,56); //返回值是int类型,则需用int类型接收,后面就是方法的调用:方法名(这里可以填写变量值);
System.out.println(m);
}
/*当自己写方法时
* public static :这俩是修饰词,不用变
* void:是返回类型.
* 1.这里的void是没有返回值;
* 2.基本数据类型: 8种
* 3.引用数据类型: 数组 -> int[] char[]
* 有返回值类型的方法,必须添加return返回值,没有返回值类型的方法也可以使用return,return表示方法结束.
* main:表示主方法,这里可以自己取名
* 取名的规则:1.可读性 2.第一个单词首字母小写,第二个单词首字母大写(驼峰命名法)
* (String[] args):这个括号里代表,类型+变量名,当需要使用多个类型时,中间加‘,’隔开
* *
*/
public static int max(int a,int b,int c) {
if(a>b && a>c) {
return a;
}else if(b>a && b>c) {
return b;
}else {
return c;//方法里返回类型为int,则需return一个int类型
}
}
}
代码说明2
import java.util.Arrays;
//设计一个方法,用于比较两个数组的内容是否相同
public class Demo05 {
public static void main(String[] args) {
int[] a1 = {20,23,56};
int[] b1 = {23,58,55};
boolean c = compare(a1,b1);//boolean返回,就boolean接收,后面调用
System.out.println(c);
}
public static boolean compare(int[] a, int[] b) {
if(a.length != b.length) {
return false;
}
for(int i=0;i<a.length;i++) {
if(a[i]!=b[i]) {
return false;
}
}
return true;
}
}
代码说明3(数组,方法调用综合)
import java.util.Scanner;
/*随机生成五个字母
* 用户猜字母
* 提示:对了几个,错了几个
*
* ABCGD
* ABCGF
* 错了一个对了四个
*
* 思路:
* 1.随机生成五个不同字母 这是一个字符数组1
* 2.用户控制台输入字母 String>拆解>字符数组2
* 3.比较两个字符数组 然后提示
* 4.一个一个比较,如果不相同重复2,3步骤
* */
public class Deom06 {
public static void main(String[] args) {
//1.调用随机生成方法
char[] result = randomLetter();
System.out.println(result);
//4.重复2.3
while(true) {
//2.用户控制台输入字母
Scanner sc = new Scanner(System.in);
System.out.println("一起来猜字母吧,请输入五个大写字母");
String str = sc.next();
//调用字符串变成字符数组的方法
char[] guess = guessLetter(str);
//3.调用
int[] tips = compare(result,guess);
System.out.println("你猜的字母值跟答案有"+tips[0]+"相同" + ",字母位置有"+tips[1]+"相同");
//5.游戏结束
if(tips[0]==5 && tips[1]==5){
System.out.println("恭喜你猜对啦");
break;
}
}
//
}
//1.随机生成五个不同字母
public static char[] randomLetter() {
char[] chars = new char[5];
for(int i=0;i<chars.length;i++) {
chars[i] =(char)(Math.random() * 26 + 'A');
//因为生成不同的5个字母所以要去除重复值
for(int j=0;j<i;j++) {
if(chars[i]==chars[j]) {
i--;//因为判断了有重复值,所以i--
break;//结束循环重新进入上一层循环再次随机赋值
}
}
}
return chars;
}
//2.将从键盘获得的字符串,转换成字符数组
public static char[] guessLetter(String str) {
//这里为什么是String类型呢,因为调用方法时,从键盘获得的类型就是字符串类型
char[] chars = new char[5];
for(int i =0;i<chars.length;i++) {
//下面这里是利用数组的遍历,然后经过str.charAt这个方法获取str字符串里对应 下标的值
chars[i] = str.charAt(i);
}
return chars;
}
//3.比较两个字符数组
public static int[] compare(char[] result,char[] guess) {
int arr[] = new int[2];
//arr[0]表示存字符值相同个数;arr[1]表示存字符位置相同
for(int i = 0;i<result.length;i++) {
for(int j=0;j<guess.length;j++) {
if(result[i]==guess[j]) {
//判断值相等
arr[0]++;
}if(result[i]==guess[j] && i==j) {
//对应位置值相等
arr[1]++;
}
}
}
return arr;//返回存的相同个数arr0和1的数组
}
}