JAVA学习 Day3(数组)

回顾

顺序结构
条件分支:
if
if - else
if - else if - else if … - else
switch(int\short\char\byte\String) - case - default
break
循环结构:
for(初始值; 循环条件; 步进方式){循环体}
有规律, 或者知道次数
while(循环条件) {循环体}
do{循环体} while(循环条件)
直到…
当… 没有规律, 或者不知道次数
终止循环: break
结束一次循环,继续下次循环: continue

数组

基本数据类型: byte\short\int\long\float\double\char\boolean
数组array: 最基本的一种数据结构 - 数据的排列方式
数组是第一种引用类型,是可以存储多个变量的容器
三种初始化方法:
int[] arr = {元素}; – 直接确定元素内容和长度
int[] arr = new int[] {元素} – 直接确定元素内容和长度(可以用来二次赋值,赋值后原数组在堆中消失,并创建一个新的数组数据堆,栈中的标识不变)
int[] arr = new int[num] – 确定长度, 内容默认值0
数组属性: 长度
arr.length: 不可变
数组元素: 通过下标/索引 index
index范围: 0 ~ length-1
arr[index] 访问\赋值
数组遍历: for循环

JVM内存空间

方法区: 存储类相关的信息
栈: 临时变量, 局部变量
堆: 引用类型的真正数据, 对象

类加载: 将字节码(class文件)中的类信息读取到JVM方法区中由类加载器完成

方法: 函数/过程, 包含了一些代码
主方法
语法/结构:

 修饰词            方法返回值类型                    方法名       (参数列表)      {方法体}
 public static    void/int/int[]/boolean/String   main/随意    int a, int b   一些代码

参数: 也叫临时变量, 类型 变量名
参数列表可以为空, 也可以多个, 多个参数之间用’,'隔开

有返回值的方法, 需要通过return返回结果
return表示方法结束, 没有返回值的方法, 也可以使用return

代码的内存形式表示

常用方法

Scanner
int nextInt(): 获取控制台内容, 并且转换成int值返回
double nextDouble(): 获取控制台内容,并且转换成double返回
String next(): 获取控制台字符串, 并返回(遇到回车或者空格读取结束)
String nextLine(): 获取控制台一整行字符串,并返回(遇到回车结束)一般放在第一行
System
void print(内容) -> 打印, 不换行
void println(空/内容) -> 打印完, 换行
Math
double random(): 返回一个[0,1)随机数
double pow(double d1, double d2): 返回 d1 的 d2 次幂
转义字符: \n:回车 \r:换行 \t:制表符 \:\本身
String:
char charAt(int index): 返回index索引位置对应的字符
Arrays:
String toString(数组): 将数组变成字符串格式返回

命名规则:

1.只能出现:英文 + 数字 + _ + $
2.不能以数字开头
3.变量名:可读性好、首字母小写、第二个单词开始首字母大写
4.包名:全部小写,域名倒写
	www.baidu.com
	com.baidu.zhidao.xx.xx
	com.baidu.baike.xx.xx
5.方法名: 首字母小写、第二个单词开始首字母大写 - 驼峰命名法
         长度不限, 但是一定要可读性好

例题

猜字母游戏

package com.hzt.java;
/**
 * 猜字母游戏:
 * 1.生成5个随机字母 -> 字符数组
 * 2.猜字母 -> 控制台输入字符串, 转换成了字符数组
 * 3.比较两个字符数组, 得到字符正确个数, 位置正确个数
 * 4.如果没猜对, 继续重复2和3步
 */
import java.util.Scanner;

import static java.lang.Math.random;

public class Democaizimu {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        char r[] = new char[5];
        char n[] = new char[5];
        int c[] = new int[2];
        String s;
        r = randomsChars(); //生成5个随机字母
/*        for (int i = 0; i < 5; i++) {
            System.out.print(r[i]);
        }*/
        System.out.println("输入0退出游戏");
        System.out.print("请输入五个字符:");
        while (true) {
            s = console.next();
            if (s.equals("0")) {
                System.out.println("退出游戏成功");
                break;
            }
            n = parseChar(s);//输入5个字母并且转换为字符串
/*        for(int i = 0; i < 5; i++){
            System.out.print(n[i]);
        }*/
            c = compareStr(r, n);
            System.out.println(c[1] + "个字母相同");
            System.out.println("其中有" + c[0] + "个字母位置也相同");//比较两个字节组得出位置和字母都相同的字母数和相同的字母数
            if (c[0] == 5) {
                System.out.println("全部正确!");
                break;
            } else {
                System.out.print("请重新输入5个字母:");
            }

        }

    }

    /**
     * 目的: 得到一个长度为5的字符数组
     * 随机的五个字母, 不重复
     */
    public static char[] randomsChars() {
        char[] letter = new char[5];
        int i, j;
        for (i = 0; i < 5; i++) {
            letter[i] = (char) (Math.random() * 26 + 65);
            for (j = 0; j < i; j++) {
                if (letter[i] == letter[j]) {
                    i--;//如果相等则使i退回在重新生成一位随机字母与前面的字母比较
                    break;
                }
            }
        }
        return letter;
    }
    
    /**
     * 目的: 为了将指定字符串转换成字符数组,并返回
     */
    public static char[] parseChar(String a) {
        Scanner console = new Scanner(System.in);
        char[] n = new char[5];
        n = a.toCharArray();
        while (n.length != 5) {
            System.out.print("字符数不对,请重新输入:");
            a = console.next();
            n = a.toCharArray();
        }
        return n;
    }
     /**
     * 目的: 比较两个字符数组
     * 返回两个结果, 分别是 字母正确个数和位置正确个数
     * 两个结果放在一个变量中返回, 所以确定返回值类型是int[]
     */
    public static int[] compareStr(char[] a, char[] b) {
        int[] c = new int[2];
        int i, j;
        for (i = 0; i < a.length; i++) {
            if (a[i] == b[i]) {
                c[0]++;
            }
            for (j = 0; j < a.length; j++) {
                if (a[i] == b[j]) {
                    c[1]++;
                }
            }
        }
        return c;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值