JavaSE数组详解与实战案例应用

1.数组声明:

第一种:数据类型 变量名[],例如:int x[];

第二种:数据类型[] 变量名=new 数据类型[要在内存中开辟的空间数量,例如:int[] x=new int[3];

第三种:数据类型[] 变量名=new 数据类型[]{元素1,元素2,元素3};

例子1:

public staticvoidmain(String[] arg){

//定义一个字符串数组,将各个元素(也就是月饼)放入其中

String[]names={"五仁月饼","香辣牛肉月饼","金嗓子月饼","韭菜月饼"};

//通过for循环遍历一下数组,通过输出语句判断循环输出

//names.length是数组的长度,names是输出数组下标为i的元素名称

for(int i = 0;i<names.length;i++){

System.out.println("我吃到第"+(i+1)+"个月饼是"+names);

}

}

输出结果:

我吃到第1个月饼是五仁月饼

我吃到第2个月饼是香辣牛肉月饼

我吃到第3个月饼是金嗓子月饼

我吃到第4个月饼是韭菜月饼

2.数组常见的异常(2种)

1)空指针异常(NullPointerException)

原因:数组没有分配内存空间

public staticvoidmain(String[] args) {

//空指针异常

//错误提示:NullPointerException

String[]names=null;

System.out.println(names[1]);

}

输出结果:

Exception in thread "main" java.lang.NullPointerException

ata2.NullPointerException(a2.java:10)

ata2.main(a2.java:5)

2)数组越界异常

原因:下标超出了数组长度

public staticvoidmain(String[] args) {

//数组越界异常

//ArrayIndexOutOfBoundsException

String[]names={"五仁月饼","香辣牛肉月饼","金嗓子月饼","韭菜月饼"};

System.out.println(names[4]);

3.数组内存结构分析

栈内存和堆内存的区别:

数组内存分为 栈内存 和 堆内存。

栈内存 中是用来存放变量名的,存放确定大小的,存的是一个内存地址,通过它可以从堆内存中找到其对应的值,存取速度比堆内存快,例如:names

堆内存 中用来存放值的,存放不确定大小的,需要动态代码运行到这一句才会确定大小,例如:"小明"

4.多维数组

习题:3个班级各4名学员参赛,计算每个班的平均成绩

public staticvoidmain(String[] args) {

//创建一个键盘输入

Scannerinput = newScanner(System.in);

//定义一个scores二维数组,第一个存班级数量,第二个存学生数量

int scores[][]=new int[3][4];

//遍历,将输入的成绩存入到二维数组scores中

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 4; j++) {

System.out.println("请输入第"+(i+1)+"个班级的第"+(j+1)+"个同学的成绩:");

scores[j]=input.nextInt();

}

}

//输出二位数组的每个元素

for (int i = 0; i < 3; i++) {

System.out.println("第"+(i+1)+"个班级的学员成绩:");

int sum = 0;

for (int j = 0; j < 4; j++) {

System.out.println("第"+(j+1)+"个学员的成绩是:"+scores[j]);

sum+=scores[j];

}

System.out.println("第"+(i+1)+"个班级的平均分是:"+(sum/4));

}

}

输出结果:

请输入第1个班级的第1个同学的成绩:

61

请输入第1个班级的第2个同学的成绩:

71

请输入第1个班级的第3个同学的成绩:

85

请输入第1个班级的第4个同学的成绩:

92

请输入第2个班级的第1个同学的成绩:

64

请输入第2个班级的第2个同学的成绩:

73

请输入第2个班级的第3个同学的成绩:

95

请输入第2个班级的第4个同学的成绩:

66

请输入第3个班级的第1个同学的成绩:

35

请输入第3个班级的第2个同学的成绩:

73

请输入第3个班级的第3个同学的成绩:

83

请输入第3个班级的第4个同学的成绩:

94

第1个班级的学员成绩:

第1个学员的成绩是:61

第2个学员的成绩是:71

第3个学员的成绩是:85

第4个学员的成绩是:92

第1个班级的平均分是:77

第2个班级的学员成绩:

第1个学员的成绩是:64

第2个学员的成绩是:73

第3个学员的成绩是:95

第4个学员的成绩是:66

第2个班级的平均分是:74

第3个班级的学员成绩:

第1个学员的成绩是:35

第2个学员的成绩是:73

第3个学员的成绩是:83

第4个学员的成绩是:94

第3个班级的平均分是:71

优化思考:成绩为0-100分,如何在录入成绩的时候保证不录入错误呢?

分析:写入判断,如果输入的成绩大于100或者小于0,那么就提示错误,可以重新对该同学的成绩进行输入。

public staticvoidmain(String[] args) {

Scannerinput = newScanner(System.in);

int scores[][] = new int[3][4];

for (int i = 0; i < 3; i++) {

for (int j = 0; j < 4; j++) {

System.out.println("请输入第"+(i+1)+"个班级的第"+(j+1)+"个同学的成绩:");

scores[j]= input.nextInt();

if (scores[j] > 100|| scores[j] < 0) {

System.out.println("输入成绩无效,成绩为0-100分,请重新输入");

//方法1:通过j--将这次循环记录删除,这样下次循环就会再循环到这个同学的成绩输入

j--;

//方法2:在没有跳出循环的情况下再次输入一次

//System.out.println("请输入第"+(i+1)+"个班级的第"+(j+1)+"个同学的成绩:");

//scores[j] = input.nextInt();

}

}

}

for (int i = 0; i < 3; i++) {

System.out.println("第"+(i+1)+"个班级同学成绩:");

int sum = 0;

for (int j = 0; j < 4; j++) {

System.out.println("第"+(j+1)+"个同学的成绩为:"+scores[j]);

sum+=scores[j];

}

System.out.println("第"+(i+1)+"个班级的平均成绩为:"+(sum/4));

System.out.println("---------------------------------------------");

}

}

简单java教程例子:

1.猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数。

public static void main(String[] args) {

int num[] ={3,5,7,83,23,64};

boolean flag = false;

Scannerscan = newScanner(System.in);

System.out.println("猜数字游戏");

System.out.println("请输出一个数字:");

int input = scan.nextInt();

for (int i = 0; i < num.length; i++) {

if (num == input) {

flag= true;

break;

}

}

if (flag) {

System.out.println("恭喜您猜对了~");

}else{

System.out.println("很遗憾,您猜错了~");

}

}

2.使用字母打印正三角形.

A

BBB

CCCCC

DDDDDDD

EEEEEEEEE

FFFFFFFFFFF

GGGGGGGGGGGGG

public staticvoidmain(String[] args) {

char[] sj = {‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘};

//打印的行数

for (int i = 0; i < sj.length; i++) {

//打印每行的空格数量

for (int j = i; j < sj.length - 1; j++) {

System.out.print(" ");

}

//打印每行的字母数量

for (int j = 0; j <= i * 2;j++) {

System.out.print(sj);

}

System.out.println();

}

}

3.求数组中的最大值最小值。

public staticvoidmain(String[] args) {

int num[] ={3,29,33,6,90,24,50};

int max = num[0];

int min = num[0];

for (int i = 0; i < num.length; i++) {

if (num > max) {

max= num;

}

if (num < min) {

min = num;

}

}

System.out.println("数组中的最大值为:" + max);

System.out.println("数组中的最小值为:" + min);

}

4.有一串数字:748,520,998,1001,250,512,502,使用冒泡排序分别对其进行由小到大,由大到小的排列起来。

public staticvoidmain(String[] args) {

int num[] ={748,520,998,1001,250,512,502};

int temp;

for (int i = 0; i < num.length - 1; i++) {

for (int j = 0; j < num.length - 1 - i; j++) {

if (num[j] > num[j +1]) {//>是从小到大排,<是从大到小排

temp= num[j];

num[j]= num[j + 1];

num[j+ 1] = temp;

}

}

}

System.out.println("积分榜排名为:");

for (int i = 0; i < num.length; i++) {

System.out.print(num + " ");

}

}

实际案例应用:

双色球彩票程序

/**

* 应用案例:模拟双色球彩票程序

* 实现步骤:

* 1.系统生成一个篮球和6个红球,并存储起来

* 2.接受用户选号,1个篮球和6个红球

* 3.验证系统号码与用户号码是否匹配(是否中奖)

* 4.公布本期中奖号码

*/

双色球彩票规则:

一等奖:500万,1个蓝球,6个红球

二等奖:一等奖的30%,6个红球

三等奖:3000元,1个蓝球,5个红球

四等奖: 200元,5个红球或者1个蓝球,4个红球

五等奖:10元,4个红球或者1个蓝球,3个红球

六等奖:5元,1个蓝球

程序代码如下:

public staticvoidmain(String[] args) {

int sysBlue;                //系统生成的1个蓝球号

int[] sysRed = new int[6];      //系统生成的6个红球号

int userBlue;               //用户输入的1个蓝球号

int[] userRed = new int[6];     //用户输入的6个红球号

int blueball = 0;           //正确的蓝球个数

int redball = 0;            //正确的红球个数

Randomr = newRandom();    //随机函数

Scannerinput = newScanner(System.in);//键盘输入

//红球所有的33个号

int[] redNum ={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32};

//系统随机在1-16中生成蓝球号

sysBlue= r.nextInt(16)+1;

//随机生成的红球号码

for (int i = 0; i < sysRed.length; i++) {

while(true){

int index = r.nextInt(33);      //随机生成0-32的下标

if (redNum[index] != 0) {

sysRed= redNum[index];

redNum[index]= 0;

break;

}

}

}

System.out.println("双色球彩票选号开始啦~");

System.out.println("请选择篮球号码(16选1):");

userBlue= input.nextInt();

System.out.println("请选择红球号码(33选6):");

for (int i = 0; i < userRed.length; i++) {

userRed= input.nextInt();

}

//验证篮球和红球的正确个数

//---------验证篮球

if (userBlue == sysBlue) {

blueball= 1;

}

//---------验证红球

for (int i = 0; i < userRed.length; i++) {

for (int j = 0; j < sysRed.length; j++) {

if (userRed ==sysRed[j]) {

redball++;

break;

}

}

}

//判断是否中奖

if (blueball == 1&& redball == 6) {

System.out.println("恭喜你,中了一等奖500万!");

}else if(redball == 6){

System.out.println("恭喜你,中了二等奖");

}else if(blueball == 1&& redball == 5){

System.out.println("恭喜你,中了三等奖,3000元");

}else if(redball == 5 ||(blueball == 1 && redball == 4)){

System.out.println("恭喜你,中了四等奖,200元");

}else if(redball == 4 ||(blueball == 1 && redball == 3)){

System.out.println("恭喜你,中了五等奖,10元");

}else if(blueball == 1){

System.out.println("恭喜你,中了六等奖,5元");

}else{

System.out.println("很遗憾,您没有中奖~~继续加油~~╮(╯▽╰)╭");

}

//公布本期中奖号码

int temp;

for (int i = 0; i < sysRed.length-1; i++) {

for (int j = 0; j < sysRed.length-1-i; j++) {

if (sysRed[j] >sysRed[j+1]) {

temp= sysRed[j];

sysRed[j]= sysRed[j+1];

sysRed[j+1] = temp;

}

}

}

System.out.println("本期的中奖号码为:");

System.out.println("红球:");

for (int i = 0; i < sysRed.length; i++) {

System.out.println(sysRed+" ");

}

System.out.println();

System.out.print("篮球:" + sysBlue);

}

有人说JavaSE的意义何在,不就是一个Dos窗口输出几个白字而已,在实际开发中也很少用,其实不然,JavaSE是JavaEE的开发的基础,有好的基础才能将更深的知识应用自如。

时间: 2024-10-13 02:37:30

JavaSE数组详解与实战案例应用的相关文章

Storm容错机制Acker详解和实战案例

Storm中有个特殊的Executor叫acker,他们负责跟踪spout发出的每一个Tuple的Tuple树.当acker发现一个Tuple树已经处理完成了,它会告诉框架回调Spout的ack(),否则回调Spout的fail(). Acker的跟踪算法是Storm的主要突破之一,对任意大的一个Tuple树,它只需要恒定的20字节就可以进行跟踪. 我们期望的是,如果某个Tuple被Bolt执行失败了,则Spout端可以重新发送该Tuple.但很遗憾的是,框架不会自动重新发送,需要我们自己手工编

(转)awk数组详解及企业实战案例

awk数组详解及企业实战案例 原文:http://www.cnblogs.com/hackerer/p/5365967.html#_label03.打印数组:1. [[email protected] test]# awk 'BEGIN{array[1]="zhurui";array[2]="zhuzhu";for(key in array) print key,array[key]}'2. 1 zhurui3. 2 zhuzhu4. [[email protect

BIT 树状数组 详解 及 例题

(一)树状数组的概念 如果给定一个数组,要你求里面所有数的和,一般都会想到累加.但是当那个数组很大的时候,累加就显得太耗时了,时间复杂度为O(n),并且采用累加的方法还有一个局限,那就是,当修改掉数组中的元素后,仍然要你求数组中某段元素的和,就显得麻烦了.所以我们就要用到树状数组,他的时间复杂度为O(lgn),相比之下就快得多.下面就讲一下什么是树状数组: 一般讲到树状数组都会少不了下面这个图: 下面来分析一下上面那个图看能得出什么规律: 据图可知:c1=a1,c2=a1+a2,c3=a3,c4

算法学习笔记 KMP算法之 next 数组详解

最近回顾了下字符串匹配 KMP 算法,相对于朴素匹配算法,KMP算法核心改进就在于:待匹配串指针 i 不发生回溯,模式串指针 j 跳转到 next[j],即变为了 j = next[j]. 由此时间复杂度由朴素匹配的 O(m*n) 降到了 O(m+n), 其中模式串长度 m, 待匹配文本串长 n. 其中,比较难理解的地方就是 next 数组的求法.next 数组的含义:代表当前字符之前的字符串中,有多大长度的相同前缀后缀,也可看作有限状态自动机的状态,而且从自动机的角度反而更容易推导一些. "前

iptables详解加实战

iptables 组件是一种工具,也称为用户空间(userspace),它使插入.修改和除去信息包过滤表中的规则变得容易.分为四个表和五个链,其中表是按照对数据包的操作区分的,链是按照不同的Hook点来区分的,表和链实际上是netfilter的两个维度. 4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表).表的处理优先级:raw>mangle>nat>filter. filter:一般的过滤功能,如不-t指定表,则默认filte

Apache中https的详解及应用案例

Apache中https的详解及应用案例 一.https的简介 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息.它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版. 它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果.HTTPS实际上应用了Netscape的安全全套接字层(SSL)作为HTTP应用层的子层.(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信.)S

“全栈2019”Java第二十八章:数组详解(上篇)

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第二十八章:数组详解(上篇) 下一章 "全栈2019"Java第二十九章:数组详解(中篇) 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组"

“全栈2019”Java第三十章:数组详解(下篇)

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第三十章:数组详解(下篇) 下一章 "全栈2019"Java第三十一章:二维数组和多维数组详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&qu

“全栈2019”Java第三十一章:二维数组和多维数组详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第三十一章:二维数组和多维数组详解 下一章 "全栈2019"Java第三十二章:增强for循环Foreach语法 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Ja