什么是数组?

数组的定义:是用统一的名字代表这批数据,用序号来区分各个数据。数组是无序的数据元素按有序的下标组成的集合,分配固定空间大小的一种容器。

如何理解:其实就是一个同时放很多数据的变量。

a=1;

a=2;

a=3;

这成了反复赋值,最后a=3;

a怎么能同时放下1,2,3......?

如 int a0;int a1; int a2; 同时具备3个变量才能存储。

一定让a存下3个或更多数据呢?

如果是同样的数据类型,这时用一个变量名 a 来放这些数据,这就是数组。

如下:

a0=1;

a1=2;

a2=3;

a3=4;

a4=5;

a5=6;

这样变量名字还是变了,我们用 a[下标] 来表示数组中的某个元素

归纳一下:如何赋值一个数组呢? 确定数组的数据类型 int a[20] 下标从0开始。//for(int i=0;// orc guai[100];

a[0]=1;

a[1]=2;

a[2]=3;

.........a[19];

存储固定大小同类元素的容器。

两种定义方法:

一种:

dataType[] arrayName = new dataType[arraySize];

int [] arr=new int[10];

arr[0]=22;

arr[1]=18;

........

arr[9]=321;

另一种:

dataType[] arrayName = {value0, value1, ..., valuek};

int [] arr={238,23,21,34,87,2,3,19,198,28};


使用一位数组解决 1 1 2 3 5 8 13 数列问题 斐波纳契数列 Fibonacci

//一维数组 输出30个Fibonacci数列
#include <iostream>
using namespace std; int main(){
//定义一个一维数组
int arr[]={,};
//造fabonacci数组
for(int i=;i<;i++) {
arr[i]=arr[i-]+arr[i-];
}
//遍历一下
for(int i=;i<;i++){
cout<<arr[i]<<endl;
} return ;
}

分析?

1 1 2 3 5 8 13 这个数列的下一个是什么?得到什么规律?如何用一维数组实现?

把C++的程序编程Java的。


一维数组的排序,把数组中的元素按照从小到大的顺序输出?

两种方法选择法与冒泡法

选择法的思路?

思路:用一个数组元素和所有其他的所有元素PK,谁小谁放第一个,确定一个位置再确定下一个位置,一次类推

把下边c++的代码换成Java的

#include <iostream>
using namespace std; int main(){
//声明一维数组?整型的一维数组,就是数组中所有的元素都是int
int arr[]={,,,,,,,,,}; for(int i=;i<;i++){
cout<<"一维数组的第 "<<i<<" 个值是 "<<arr[i]<<endl;
} //请你给刚才的数组的进行排序,要求从小到大输出 (选择法)
// for(int i=0;i<10-1;i++){
// for(int j=i+1;i<10;j++){
// if(array[i]>array[j]){
// int temp;
// temp=array[i];
// array[i]=array[j];
// array[j]=temp;
// }
// }
// }
for(int i=;i<-;i++) {
for(int j=i+;j<;j++) {
if(arr[i]>arr[j]) {
int temp;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
//排序后再遍历字符一下数组
for(int i=;i<;i++){
cout<<"遍历后一维数组的第 "<<i<<" 个值是 "<<arr[i]<<endl;
}
return ;
}

选择法的思路?

思路:

数组中相邻的两个元素两两比较,逐步把小的放在前面,一轮过后最大的数值如石头一样沉入水底,而相对较小的数值如气泡逐渐在水中上浮,经过n轮的两两比较冒泡排序

把下边c++的代码换成Java的

#include <iostream>
using namespace std; int main(){
//声明一维数组?整型的一维数组,就是数组中所有的元素都是int
int arr[]={,,,,,,,,,}; for(int i=;i<;i++){
cout<<"一维数组的第 "<<i<<" 个值是 "<<arr[i]<<endl;
} for(int i=;i<;i++) {
for(int j=;j<--i;j++) {
if(arr[j]>arr[j+]) {
int temp;
temp=arr[j];
arr[j]=arr[j+];
arr[j+]=temp;
}
}
}
//排序后再遍历字符一下数组
for(int i=;i<;i++){
cout<<"遍历后一维数组的第 "<<i<<" 个值是 "<<arr[i]<<endl;
}
return ;
}

什么是对象数组?

人类对象数组——一堆人,实例如下:

package com.swift;

public class PersonArray
{
public static void main(String args[])
{
person per[]=new person[3];
per[0]=new person("张三",20);
per[1]=new person("李四",22);
per[2]=new person("王五",23);
for (int x=0;x<per.length;x++)
{
per[x].getinfo();
}
}
}
class person
{
private String name;
private int age;
public person(String name,int age)
{
this.name=name;
this.age=age;
}
public void getinfo()
{
System.out.println("姓名: "+this.name+" 年龄: "+this.age);
}
}

最后使用一维数组来完成吃金币游戏中,成堆的金币,很多炸弹的布置。

实现游戏中生成8个金币精灵和3个炸弹精灵,每个精灵有自己的精灵序号,和在游戏窗口中的横纵坐标

游戏代码如下:

package com.swift;

import java.awt.Color;
import java.awt.Point;
import java.awt.event.KeyEvent; import com.rupeng.game.GameCore;
/**
* @author swift
* @version 2.0
* @category 新增炸弹功能,精灵如果吃到炸弹立即死亡,游戏结束;
* @category 新增游戏倒计时功能,倒计时60秒
* @category 新增游戏胜利失败功能,吃完金币则胜利,吃到炸弹失败
*/
public class Coin2 implements Runnable { public static void main(String[] args) {
GameCore.start(new Coin2());
} @Override
public void run() {
//设置窗体大小、标题、背景
GameCore.setGameSize(800, 345);
GameCore.setGameTitle("用键盘操控精灵移动的小游戏");
GameCore.loadBgView("bg.jpg");
// 设置女精灵出现及出场位置
int spriteGirl = 0;
GameCore.createSprite(spriteGirl, "guizi");
GameCore.playSpriteAnimate(spriteGirl, "run", true);
GameCore.setSpritePosition(spriteGirl, 140, 190);
// 使用数组放置8个金币的数量、横坐标、纵坐标
int[] coinNum = { 1, 2, 3, 4, 5, 6, 7, 8 };
int[] coinXDate = { 100, 200, 300, 400, 500, 600, 700, 730 };
int[] coinYDate = { 140, 180, 150, 190, 140, 170, 160, 140 };
// 使用数组放置3个炸弹的数量、横坐标、纵坐标
int[] bombNum = { 9, 10, 11 };
int[] bombXDate = { 250, 450, 650 };
int[] bombYDate = { 160, 160, 190 };
//boolean[] coinIsDead = new boolean[8]; //设置右上角显示的金币图片和吃到的金币数量
GameCore.createImage(0);
GameCore.setImageSource(0, "bigCoin.png");
GameCore.setImagePosition(0, 710, 20);
GameCore.createText(0, "NUM");
GameCore.setTextColor(0, Color.WHITE);
GameCore.setTextPosition(0, 650, 25);
GameCore.createText(1, "0");
GameCore.setTextPosition(1, 760, 25);
GameCore.setTextColor(1, Color.WHITE); //设置左上角显示的时间倒计时
GameCore.createText(3, "Time-Left");
GameCore.setTextColor(3, Color.WHITE);
GameCore.setTextFontSize(3, 20);
GameCore.setTextPosition(3, 25, 5);
GameCore.createText(4, "60");
GameCore.setTextPosition(4,60, 25);
GameCore.setTextColor(4, Color.WHITE);
GameCore.setTextFontSize(4, 28); //设置游戏倒计时的时间开始点
long timeBegin=System.currentTimeMillis(); //设置吃掉金币前金币依然活着 另一种初始化数组方法 boolean[]
boolean[] coinIsDead={false,false,false,false,false,false,false,false};
//金币精灵死亡数
int textNum = 0;
//根据横纵坐标设置金币精灵在游戏中的出现
for (int i = 0; i < coinNum.length; i++) {
GameCore.createSprite(coinNum[i], "coin");
GameCore.setSpritePosition(coinNum[i], coinXDate[i], coinYDate[i]);
GameCore.playSpriteAnimate(coinNum[i], "rotate", true);
}
//根据横纵坐标设置炸弹精灵在游戏中的出现
for (int i = 0; i < bombNum.length; i++) {
GameCore.createSprite(bombNum[i], "bomb");
GameCore.playSpriteAnimate(bombNum[i], "laser", true);
GameCore.setSpritePosition(bombNum[i], bombXDate[i], bombYDate[i]);
}
//创建新的爆炸精灵,等待触发
int newBombNum=12;
GameCore.createSprite(newBombNum, "bomb"); //创建获胜或失败时的文本,等待触发
int newTextNum=2; //无限循环获取时时键盘信息,改变女精灵的位置
for (;;) {
int codeNum = GameCore.getPressedKeyCode();
Point position = GameCore.getSpritePosition(spriteGirl);
//如果按向上或W键则向上移动 并且设置上边界为135
if (codeNum == KeyEvent.VK_UP || codeNum == KeyEvent.VK_W) {
if (position.y > 135) {
GameCore.setSpritePosition(spriteGirl, position.x, --position.y);
GameCore.pause(1);
}
}
//如果按向下或S键则向下移动 并且设置下边界为190
if (codeNum == KeyEvent.VK_DOWN || codeNum == KeyEvent.VK_S) {
if (position.y < 190) {
GameCore.setSpritePosition(spriteGirl, position.x, ++position.y);
GameCore.pause(1);
}
}
//如果按向左或A键则向左移动 并且设置左边界为0
if (codeNum == KeyEvent.VK_LEFT || codeNum == KeyEvent.VK_A) {
if (position.x > 0) {
GameCore.setSpriteFlipX(spriteGirl, true);
GameCore.setSpritePosition(spriteGirl, --position.x, position.y);
GameCore.pause(2);
}
}
//如果按向右或D键则向右移动 并且设置右边界为730
if (codeNum == KeyEvent.VK_RIGHT || codeNum == KeyEvent.VK_D) {
if (position.x < 730) {
GameCore.setSpriteFlipX(spriteGirl, false);
GameCore.setSpritePosition(spriteGirl, ++position.x, position.y);
GameCore.pause(1);
}
}
//得到当前女精灵的位置
Point pGirl = GameCore.getSpritePosition(spriteGirl);
//判断女精灵和任意金币的距离,足够接近金币就消失,并设置该金币已死
for (int i = 0; i < coinNum.length; i++) {
if(coinIsDead[i]) {
continue;
}
Point pCoin = GameCore.getSpritePosition(coinNum[i]); double distance = Math.sqrt((Math.pow((pCoin.x - pGirl.x), 2) + Math.pow((pCoin.y - pGirl.y), 2)));
if (distance < 30) {
GameCore.hideSprite(coinNum[i]);
coinIsDead[i] = true;
textNum = 0;//这句含义很大,无限循环每次到这清零,不然数字无限疯长
for(int j=0;j<coinNum.length;j++) {
if(coinIsDead[j]==true){//我把这写成了i,所以只要吃掉一个,就是8了,应该是j
textNum++;
}
}
GameCore.setText(1, Integer.toString(textNum));//这句放在循环外边,不然
}
if(textNum==8) {
//输出文本
GameCore.createText(newTextNum, "You Win");
GameCore.setTextPosition(newTextNum, 300, 150);
GameCore.setTextColor(newTextNum, Color.RED);
GameCore.setTextFontSize(newTextNum, 88);
GameCore.pause(3000);
GameCore.exit(); }
}
//判断女精灵和任意炸弹的距离,足够接近炸弹就爆炸,游戏失败
for (int i = 0; i < bombNum.length; i++) {
Point pBomb = GameCore.getSpritePosition(bombNum[i]); double distance = Math.sqrt((Math.pow((pBomb.x - pGirl.x), 2) + Math.pow((pBomb.y - pGirl.y), 2)));
if (distance < 20) {
//隐藏原炸弹精灵
GameCore.hideSprite(bombNum[i]);
//出现新爆炸精灵
GameCore.playSpriteAnimate(newBombNum, "fire", true);
//在原来炸弹的位置出现新炸弹
GameCore.setSpritePosition(newBombNum, pBomb.x, pBomb.y);
GameCore.pause(3000);
//输出文本
GameCore.createText(newTextNum, "You Lose");
GameCore.setTextPosition(newTextNum, 300, 150);
GameCore.setTextColor(newTextNum, Color.RED);
GameCore.setTextFontSize(newTextNum, 88);
GameCore.pause(2500);
GameCore.exit();
}
}
//设置游戏倒计时的时间结束点
long timeEnd=System.currentTimeMillis();
int timeText=(int)(60-(timeEnd-timeBegin)/1000);
GameCore.setText(4, Integer.toString(timeText));
if(timeText==0) {
GameCore.alert("游戏通关时间已到,即将结束。");
GameCore.exit();
}
} }
}
(1)新增炸弹功能,精灵如果吃到炸弹立即死亡,游戏结束;
(2)新增游戏倒计时功能,倒计时60秒
(3)新增游戏胜利失败功能,吃完金币则胜利,吃到炸弹失败 游戏包及素材下载地址:
https://pan.baidu.com/s/1jHI54Po

Java第十二次作业:什么是一维数组?什么是对象数组?吃金币游戏2.0版 新增炸弹功能 新增游戏倒计时功能 新增胜利失败检测功能 使用如鹏游戏引擎制作窗体 一维数组设置金币的更多相关文章

  1. java第十二次作业

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  2. Java第十二次作业:继承与抽象类解决工人与学生的问题,抽象类实例。抽象类作用——为多态创造了可能。抽象类的作用总结

    继承与抽象类解决工人与学生的问题 抽象类实例 package com.swift; public abstract class Person { private String name; privat ...

  3. java第十二周作业

    1.定义一个点类Point, 包含2个成员变量x.y分别表示x和y坐标,2个构造器Point()和Point( intx0,y0),以及一个movePoint (int dx,intdy)方法实现点的 ...

  4. 201621123005《Java程序设计》第十二次作业

    <Java程序设计>第十二次作业 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造 ...

  5. 软工 · 第十二次作业 - Beta答辩总结

    福大软工 · 第十二次作业 - Beta答辩总结 写第十二次的时候操作失误直接在Beta版本的博客里改了...第七次冲刺的作业链接补在这里 Beta(7/7) 组长本次博客作业链接 项目宣传视频链接 ...

  6. 【西北师大-2108Java】第十二次作业成绩汇总

    [西北师大-2108Java]第十二次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第14周学习指导及要求 实验目的与要求 (1)掌握GUI布局管理器用法: (2)掌握Java Swing文本 ...

  7. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  8. “全栈2019”Java第九十二章:外部类与内部类成员覆盖详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. “全栈2019”Java第十二章:变量

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. Unity3D 图形优化

    Unity3D 图形优化 例如DrawCall,我得到的是一些并不完全正确的信息,例如将N个纹理打包成一个图集,这个图集就只会产生一个DrawCall,如果不打成图集,那么就会有N个DrawCall. ...

  2. 51nod1416(dfs)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1416 题意:中文题诶- 思路:dfs 搜索同一颜色的点.. 只 ...

  3. [Xcode 实际操作]八、网络与多线程-(10)使用异步Get方式查询GitHub数据

    目录:[Swift]Xcode实际操作 本文将演示如何通过Get请求方式,异步获取GitHub资源的详细信息. 异步请求与同步请求相比,不会阻塞程序的主线程,而会建立一个新的线程. 在项目导航区,打开 ...

  4. app发布证书、真机调试证书、测试证书、推送证书详细过程

    原文网址: http://www.cnblogs.com/cxbblog/p/4028159.html 一:发布证书 遵旨:哪个开发者的哪台电脑要发布哪个app (这句话可以多读几遍) 通过上边的遵旨 ...

  5. (转)java 线程同步

    转自 http://blog.csdn.net/column/details/java-thread.html http://leo-faith.iteye.com/blog/177779 http: ...

  6. JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常

    在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常.如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度.下面用一个例子来理解. Java 7之前 ...

  7. python操作redis之String操作

    # __author__ = 'STEVEN' import redis,time # 方式1,直接链接操作 # r = redis.Redis(host='192.168.43.22',port=6 ...

  8. Web之localStorage

    localStorage: 1.localStorage拓展了cookie的4K限制 2.localStorage会可以将第一次请求的数据直接存储到本地,这个相当于一个5M大小的针对于前端页面的数据库 ...

  9. hdu6313( 2018 Multi-University Training Contest 2)

    bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6313 参考dls的讲解: 以5*5的矩阵为例: 后一列分别对前一列+0+1+2+3+4操 ...

  10. python学习之调试 错误捕捉及处理

    1 捕捉错误:try except    Err_Case1: pass except    Err_Case2: pass else: 正常情况: finally: 无论是否异常都要 处理的代码 w ...