java 爱情程序_Java的爱情:巩固控制和循环语句

原标题:Java的爱情:巩固控制和循环语句

【耿祥义老师教你:巩固控制和循环语句】

基本语句,像控制语句、循环语句等,和C语言非常类似(基本语句的训练属于第一门语言,比如C语言负责的任务)。学习Java时只需注意Java和C的不同之处即可,例如条件表达式的值必须是boolean类型等。这个文章的主要出发点是给那些初学Java,刚刚学完前3章的学生看的,其目的就是激发兴趣和巩固一下知识。但也适合适合任何学习过Java语言的学生浏览。

故事导入:英雄救美

巫婆把男孩的心意女孩藏到了纵横交错、高度各不相同的群山中的一座最高山上。

神仙告诉男孩一个救回女孩的办法,神仙对男孩说,‘你从一座山做出发点,首先看当前山的 东西南北方向的山,因为巫婆的巫术使得你无法看见更远的山。然后,在其中找一座最高的山爬上去...每爬一座山别忘记留下标记,即记住自己曾爬过此山。也许某个时候,你会发现当前山的东西南北方向的山都是曾爬过的山了。

这个时候,你按着曾留下的标记,一步一步的退回,一直退到曾爬过的某个山,发现此座山的东西南北方向的山中,除了曾爬过的山以外,还有没爬过的山,那么就在这些山中再选一座高山去爬...如此循环往复。只要无畏艰险,你一定能救回你心意的女孩’。

男孩相信了神仙的话( 方法正确),最终救回了心意的女孩( 正确的方法作正确的事)。

ea0b063d696d6002dafcff4bd08e1f20.png

程序效果图

每次运行程序,刻画纵横交错、高度各不相同的二维数组的元素的值都有变化,因此每次运行效果不尽相同。效果图的中的 圆圈是男孩寻觅的起点, 实心三角是男孩寻觅过程中曾爬过的山,空心三角是不曾爬过的山, 实心五角星是女孩所在的山。

9002601fedf193d719d809454d0964fe.png

a09e3ac9c8986730cdf398794fade8f0.png

源代码讲解

(耿祥义视频讲解)

源代码分享与下载

7862837c481afb3389d63bcdc4f6eecb.png

微信中显示区域太小,导致源代码出现很多不必要的回行.

如果觉得显示的SaveTheGirl.java源代码不利于阅读,单击阅读原文下载源代码。

//代码中打◆号注释的不要求看懂,等学完java集合框架就看懂了

//本代码主要目的是训练初学者学习控制语句和循环语句(耿祥义java老师,2020-3-8)

import java.util.ArrayList;

import java.util.Stack;

import java.util.Collections;

public class SaveTheGirl {

public static void main(String args[]) {

Stack saveI = new Stack ;//◆存放走过的山的索引坐标i

Stack saveJ = new Stack ;//◆存放走过的山的索引坐标j

ArrayList list = new ArrayList; //◆存放整数的数组表

int row = 10;//数组的行数

int column = 20; //数组的列数

for(int i=1;i<=row*column;i++) { //把1-row*column个数放入链表

list.add(i);

}

Collections.shuffle(list);//◆打乱数组表,即洗牌。

int [][] a = new int[row][column];//二位数组,刻画纵横交错的山

int index = 0;

for(int i = 0;i

for(int j = 0;j

a[i][j] = list.get(index); //得到数组表的第index个节点的值,设置山的高度

index++;

}

}

a[0][0] = 0; //男孩寻觅的起点

int MAX = row*column ; //最高的山的高度(要找的数据)

int posionX = 0;

int posionY =0; //将来存放找到的女孩(数据)的位置

//以下是男孩寻觅的过程,只要a[i][j]的值被设置成0,就表示a[i][j]是男孩爬过的山。

int max = -1;

int i = 0;

int j = 0;

int m =0,n =0;

while(true){

saveI.push(i); //记下爬过的山的位置(压栈)

saveJ.push(j); //记下爬过的山的位置

boolean boo = // 判断东西南北周围的山是否都爬过了啊!

a[i][j+1

a[i][j-1>0?j-1:0]==0&& //判断是否爬过西山

a[i+1

a[i-1>0?i-1:0][j]==0; //判断是否爬过北山

while(boo){ //假如a[i][j]的东西南北周围的山都爬过了

i= saveI.pop;

j = saveJ.pop; //退回一步。

boo =a[i+1

a[i-1>0?i-1:0][j]==0&&

a[i][j+1

a[i][j-1>0?j-1:0]==0;

//一直退到a[i][j]的东西南北周围的山中有没爬过的山

}

//这样就可以找一个东西南北中的高山爬:

if(i+1=max&&a[i+1][j]!=0){ //检查a[i][j]的北山的高度

m=i+1;

n =j; //保存该方向的索引到m,n中

max = a[i+1][j];

}

if(i-1>=0&&a[i-1][j]>max&&a[i-1][j]!=0){ //继续检查a[i][j]的南山的高度

m=i-1;

n =j; //保存该方向的索引到m,n中

max = a[i-1][j];

}

if(j+1max&&a[i][j+1]!=0){ //继续检查a[i][j]东山的高度

m=i;

n =j+1; //保存该方向的索引到m,n中

max = a[i][j+1];

}

if(j-1>=0&&a[i][j-1]>max&&a[i][j-1]!=0){ //继续检查a[i][j]的西山的高度

m=i;

n =j-1; //保存该方向的索引到m,n中

max = a[i][j-1];

}

if(max == MAX){

posionX = m;

posionY = n; //终于找到了女孩,记下位置

break ; //找到了,立刻停止循环

}

a[m][n] = 0;//没找到,将a[m][n]设置成爬过的山

i = m;

j = n;

max = -1;//走到a[m][n],继续找下一个路点

}

//以下输出男孩爬过的山和没爬过的山

for(int p=0;p

for(int q =0;q

if(a[p][q]==0) {

if(p==0&&q==0)

System.out.print("●");//男孩的起点

else

System.out.print("▲");//表示爬过的山

}

else {

if(a[p][q]==MAX)

System.out.print("★");//女孩的样子

else

System.out.print("△"); //没爬过山的

}

}

System.out.println;//输出回行

}

System.out.printf("n女孩的位置:%d,%d",posionX,posionY);//输出女孩所在山的位置索引

}

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值