Java基础-数组:猜字母数字

这是我个人写的第一个博客吧。分享下我的学习java路程。

先介绍下java数组的概念:

数组是编程语言中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常可通过数组元素的索引来访问数组元素,包括为数组元素赋值和取出数组元素的值。

1.数组可以装一组数,必须类型相同
2.数组按线性顺序,一个跟一个
3.数组也是一种数据类型
4.数组new之后,数组中的每个元素都有一个默认值
    整数:0  浮点数:0.0  boolean:false

1)数组的定义:
    int[] arr = new int[4]; //每个数都是0
2)数组的初始化

int[] arr;  //声明数组
    arr = new int[4];  //初始化
    int[] arr = {1,5,8,3}; //只能声明同时初始化
    int[] arr = new int[]{1,5,8,3};
    int[] arr;
    arr = {1,5,8,3}; //错误

3)数组的访问:通过下标
    下标从0开始

    int[] arr = new int[4];
    System.out.println(arr.length);//数组的长度4
    arr[0] = 55;//给arr中的第1个数赋值为55
    arr[4] = 99; //错误,数组越界,最大到3
    System.out.println(arr[2]);//输出第3个数

 

4)数组的遍历

 

    //遍历数组
    int[] arr = {1,8,5,3};
    for(int i=0;i<arr.length;i++){  //正序
       System.out.println(arr[i]);
    }
    for(int i=arr.length-1;i>=0;i--){  //倒序
       System.out.println(arr[i]);
    }


数组的内存分配机:

 

 

//让books数组变晕、 strArr数组变量指向names所引用的数组books e names; 
books = names;
strArr = names;
System.out.println( ”-----------…”);
”
System.out.println( ”books数组的长度3 + books. length); 
System.out.println( ”strArr数组的*度: " + strArr.length); 
//改变books数组变量所引用的数组的第2个元素值。
books[ll = ”唐僧” ;
System. out. println ( ” names数缝的第2个元素是z ” +books(l]);


上面程序中粗体字代码将让books 数组变量、strArr 数组变量都指向nam臼数组变量所引用
的数组,这样做的结果就是books、strArr、nam由这3 个变量引用同一个数组对象。当访问books 数组、strArr 数组的长度时, 将看到输出3。这很容易造成一个假想: books数组的长度从4 变成了3. 实际上, 数组对象本身的长度并没有发生改变, 变的是books 数组变量. books 数组变量原本指向堆内存下面的数组, 当执行了booksnam白,语句之后, books 数组将改为指向堆内存中间的数组,而原来books 变量所引用的数组的长度依然是4.当然,从图中还可以看出, 原来books 变盘所引用的数组长度然是4, 但不再有任何引用变量引用该数组,因此它将会变成垃圾, 等着垃圾回收机制来回收。此时, 程序使用books 、name部和strArr 这3 个变量时,将会访问同一个数组对象,因此把books 数组的第2 个元素赋值为“唐僧” 时, nam臼数组的第2 个元素的值也会随之改变。

 

PS:使用Java数组之前必须先 初始化数组,也就是为数组元素分配内存空间,并指定初始值。实际上,如果真正掌握了Java数 组在内存中分配机制,那么完全可以换一个方式来初始化数组,或者说,数组无需经过初始化。
始终记住:Java的数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中即可使用该数组变量。

下面是我自己根据一些资料来写的一个猜字母小游戏。

 

import java.util.Scanner;
public class Guessing {

	public static void main(String[] args) {
	
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		
		int level;
		do {
			System.out.println("请输入您选择的游戏等级:5、7、9");
			level =scan.nextInt();
		}while(level!=5 && level !=7 && level !=9);
		char [] chs = generate();//获取随机数组
		System.out.println(chs);
		int count = 0;
		while (true) {
			System.out.println("请猜题");
			String str = scan.next().toUpperCase();//不区分大小写,总动转换大小写字母
			if(str.equals("exit")) {//如果用户刚开始游戏就想退出的话,输入exit即可退出
				System.out.println("下次再来玩吧!");
				break;
			}
			char [] input = str.toCharArray();//讲用户输入的字符串转换成字符数组
			int [] result =check(chs,input);
			if(result[0]== chs.length) {//猜对了
				int score =chs.length*100-10*count;
				System.out.println("恭喜你,猜对了,得分为"+score);
				break;
			}else {
				count++;
				System.out.println("猜对的字符个数"+result[1]+"猜对的位置个数"+result[0]);
			}
		}
	}
	//随机生成字符组;
	public static char [] generate(){//这里呢用了一种间接方法,利用创建随机数字来对应26字母,char数组的下标
		char [] chs =new char [5];//随机字符数组;
		char [] letters = {'A','B','C','D','E','F','G','H','I','J','K',
				'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
		boolean[] flags = new boolean[letters.length];//开关数组,默认为false
		for(int i =0;i<chs.length;i++) {
			int index;//随机下标
			do {
				 index = (int)(Math.random()*26);
			}while (flags[index]==true);
			
			chs [i] = letters[index];
			flags[index] = true;//修改下标,为true
		}
		return chs;	
		
	}
	//对比:随机数组与用户输入数组作对比
	public static int[] check(char[] chs,char[] input) {
		int[] result = new int[2];//对比结果result
		for(int i =0;i<chs.length;i++) {//遍历随机数组
			for(int j = 0;j<input.length;j++) {//遍历用户输入数组
				if(chs[i] == input [j]) {//字符对
					result [1]++;//字符对个数+1
					if(i == j) {//位置对
						result[0]++;//位置对个数+1
					}
					break;//与input匹配后,不再和input剩下字符比较
				}
			}
		}
		return result;
	}
}

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最美的情书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值