程序练习之地图探测

问题描述
假如有这样一个区域,区域被划分成了一个4 x 6的探测网格,区域的长和宽都不能超过100。
在这里插入图片描述
在探测这个区域时,将会沿着蛇形路线遍历探测网格上的每一个格子:从左上角开始,向右飞行到尽头;再转向下一行,从右向左飞到尽头;再转头在下一行,从左向右飞行;不停循环直到探测完整个区域。比如这个例子中,飞行探测路线将是这样的:
在这里插入图片描述
先沿着既定的路线进行探测,最后把探测到的地形保存在一个字符串中带回来。字符串中字符按照探测每个格子的顺序排序,而每种字符表示一种不同的地形:
● R:河流;
● G:草原;
● F:森林;
比如在这个例子中,带回来的地形字符串“GRRGGGGGGRFFFFRGGFFGRRFF”,那我们就可以根据上面的线图和对应的地形字符,在地图上标记出探测区域的地形:
在这里插入图片描述
根据以上的描述,得到程序的要求:
在程序中接收两行输入:
● 第一行是两个数字,用空格分隔,表示探测网格的大小。例如:4 6 表示探测区域是一个大小4 x 6的区域。
● 第二行是一个字符串,表示探测到的对应地形。
需要输出一个和探测网格同大小的矩阵,并且保证矩阵中的字符对应探测到的相应位置的地形。
例如,如果给定输入:
4 6
GRRGGGGGGRFFFFRGGFFGRRFF
则输出的字符串为:
GRRGGG
FFRGGG
FFRGGF
FFRRGF
在处理输入的时候需要检查输入的有效性。需要检查的有效性包括几个方面:
● 无效的探测网格:第一行输入如果不能正确转换成合适的探测网格大小,此时程序输出错误信息”Incorrect mesh size.”
● 无效的地形字符:输入的探测的字符出现了不合法字符,此时程序输出错误信息“Invalid cell type”
● 数据不匹配:输入的探测的字符串长度和探测网格大小不一致,此时程序输出错误信息“Data mismatch”
Java实现:

import java.util.Scanner;
public class MapClass {

	public static void main(String[] args) {
		
		// 输入区域长和宽
		Scanner sc = new Scanner(System.in);
		int a,b;
		a = sc.nextInt();
		b = sc.nextInt();
		//判断长宽是否符合要求
		if(a>100||b>100||a<1||b<1){
			System.out.println("Incorrect mesh size");
			return;
		}			
		//输入字符串		
		String inmap = new String();
		inmap = sc.next();	
		//判断字符串长度是否符合要求	
		if(inmap.length()!=a*b){
			System.out.println("Data mismatch");
			return;
		}			
		//判断输入的字符是否符合要求
		char[] ch = inmap.toCharArray();
		for(int i=0;i<inmap.length();i++){
			if(ch[i]=='G'||ch[i]=='R'||ch[i]=='F');
			else{
				System.out.println("Invalid cell type");
				return;
			}		
		}
		char [][] outmap = new char[a][b];
		int f=0;//标识,0表示从前往后,1表示从后往前
		//将字符串整理进二维字符数组
		for(int i=0;i<ch.length;){
			if(f%2==0){
				for(int j=0;j<b&&i<ch.length;j++){
					outmap[f][j]=ch[i++];
				}
				f++;
			}else if(f%2==1){
				for(int j=b-1;j>=0&&i<ch.length;j--){
					outmap[f][j]=ch[i++];
				}
				f++;
			}
		}		
		//输出
		for(int i=0;i<a;i++){
			for(int j=0;j<b;j++){
				System.out.print(outmap[i][j]);
			}
			System.out.println();
		}
	}

}

结果
在这里插入图片描述
程序不难,有空把图形界面做出来。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值