Java 数组的学习和使用
1. 数组
1.1 什么是数组?
数组 就是最基本的一种数据结构。
• 是一组相同数据类型的元素组成的集合。
• 元素按线性顺序排列。
• 可以通过元素所在的位置的顺序号(下标、索引)做标识来访问每一个元素。
1.2 数组的定义
数据类型[ ] 数组名 = new 数据类型[大小]
例如:
int [] a =new int [5];
要点
①需要有确切的数据类型
②需要整体的数组命名
③不能缺少"[ ]"
数组元素: 通过下标/索引 index
index范围: 0 ~ length-1
1.3 数组的初始化
数组的初始化方法有三种:
①
//方式一:在声明的同时初始化,以及确定数组的内容
//不能再次赋值
int[] arr1 = {1,2,3,4};
②
//方式二:在声明的同时初始化,以及确定数组的内容
//可以再次赋值
int[] arr2 = new int[]{1,2,3,4,5};
③
//方式三:在声明的同时初始化,只能确定长度,内容全部都是默认值
//默认值:整数-0;浮点-0.0;char-\u0000
int[] arr3 = new int [5];
1.4 数组的遍历
int []arr2 = new int []{3,4,5,6,7,8,9};
System.out.println("---------------");
//如何迭代\遍历数组
for (int i = 0 ; i<arr2.length;i++){
System.out.print(arr2[i]+"\t");
}
System.out.println("\n---------------");
//通过遍历,将数组元素赋值成{10,20,30,40,50}
for(int i = 0;i<arr2.length;i++){
arr2[i]=(i+1)*10;
System.out.print(arr2[i]+"\t");
}
运行结果:
1.5 数组的排序练习
输入10个数字,并对数字进行排序
package Array;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int [] arr =new int[10];
System.out.println("请输入10个数字:(将进行排序)");
for(int i=0;i<arr.length;i++){
arr[i] = scan.nextInt();
}
scan.close();
System.out.println("数组排序:");
Text(arr);
System.out.println();
}
//排序
public static int[] Text(int a[]){
for(int i = 0;i<a.length;i++){
for(int j=i+1;j<a.length;j++) {
if (a[i] > a[j]) {
int b = a[i];
a[i] = a[j];
a[j] = b;
}
}
System.out.print(a[i]+"\t");
}
return a;
}
}
运行结果:
2. Scanner
int nextInt(): 获取控制台内容, 并且转换成int值返回
double nextDouble(): 获取控制台内容,并且转换成double返回
String next(): 获取控制台字符串, 并返回(遇到回车或者空格读取结束)
String nextLine(): 获取控制台一整行字符串,并返回(遇到回车结束)
package API;
import java.util.Scanner;
public class Demo03Scanner {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//字符串,遇到 #回车# 读取结束
String str1 = scan.nextLine();
System.out.println("字符串:"+str1);
//整数
int i = scan.nextInt();
System.out.println("整数:"+i);
//小数
double dou = scan.nextDouble();
System.out.println("小数:"+dou);
//从控制台读取字符串 !!!!遇到空格和回车结束读取。
String str = scan.next();
System.out.println("字符串:"+str);
}
}
测试结果:
3.Math简单使用
package API;
public class Demo02Math {
public static void main(String[] args) {
//Math ——>数学类
//返回一个随机数
double rand= Math.random();//[0-1)之间的数
System.out.println(rand);
//[0,100)的整数
int rand1=(int)(Math.random()*100);
System.out.println(rand1);
//[65,90]
int rand2=(int)(Math.random()*26+65);
System.out.println(rand2);
//随机大写字母和小写字母
char C = (char)(Math.random()*26+65);
char c = (char)(Math.random()*26+97);
System.out.println(C+"\t"+c);
//求次方
int pow = (int)(Math.pow(2,10));
System.out.println(pow);
//根号
double sqr = Math.sqrt(9);
System.out.println(sqr);
//绝对值
int a = Math.abs(-9);
System.out.println(a);
}
}
测试结果:
4. print
package API;
public class Demo01Print {
public static void main(String[] args) {
//可以不写参数,直接使用就是换行
System.out.println();
//不换行,必须有内容
System.out.print("\n");
System.out.println(2);
//常见的转义字符 \n->回车 \r->换行 \t->制表符
}
}
5. 猜字母游戏
package Array;
import java.util.Arrays;
import java.util.Scanner;
public class Demo02Small {
public static void main(String[] args) {
//猜字母游戏
Scanner scan = new Scanner(System.in);
System.out.println("欢迎来到猜字母游戏!");
//生成5位字符
char []b = randomChars();
System.out.println(Arrays.toString(b));//显示数组的内容
//判断输入的字符
int q =0;
while(q<5) {
System.out.println("------------------");
System.out.println("请输入猜数:(5个字符)");
String str = scan.nextLine();
char []a =parseChar(str);
int []res= compare(b,a);
System.out.print("字母正确的有:"+res[0]+"\t");
System.out.println("位置正确的有:"+res[1]);
if(q==5){
System.out.println("游戏结束!");
}else if(res[0]==5&&res[1]==5){
System.out.println("恭喜你!全部正确!");
break;
}else{
System.out.println("还剩"+(4-q)+"次机会");
q++;
}
}
}
//生成5位字符
public static char[] randomChars(){
char []x = new char[5];
for(int i=0;i<5;i++) {
int y =(int)(Math.random()*2+1);
if(y==1){
x[i] = (char) (Math.random() * 26 + 65);
}else{
x[i]= (char) (Math.random() * 26 + 97);
}
for(int j=0;j<i;j++){
if(x[i]==x[j]){
i--;
break;
}
}
}
return x;
}
//将字符串转换为数组
public static char[] parseChar(String str) {
char []a = new char[5];
for (int i = 0;i<a.length;i++){
a[i]=str.charAt(i);
}
return a;
}
//比较
public static int[] compare(char[] answer,char[] guess) {
int []result = new int[2];
for(int i = 0;i<answer.length;i++){
for(int j =0;j<guess.length;j++){
if(answer[i]==guess[j]){
result[0]++;
if(i==j){
result[1]++;
}
}
}
}
return result;
}
}
因为随机生成的字母在5次中难以答出,故直接把随机字母的结果在语句起始贴出。
测试结果: