这个问题是坐标问题,根据坐标求取长宽算出面积、周长
1、new Boolean()[1][2],其中Boolean并非是java Boolean类,是一种伪代码方法表示
2、棋盘放置位置不同会有不同算法,复杂度也不一样,解决方法采用横平竖直放于x-y坐标轴上
3、代码
/**
* @author szx
* @2020/9/29 9:48
*/
public class Chessboard {
public static void main(String[] args) {
//随便取一个棋盘内的棋子
calculateArea(100,0);
}
//使用锁,中间有++i保证线程安全
private static Object o1 = new Object();
//计算面积
public static void calculateArea(int x,int y){
//1必须给定一个初始坐标且确认坐标在棋盘
if(!checkHaveBeen(x,y)){
System.out.println("请确定参数");
return;
}
synchronized (o1){
int ileft = x;
int iright = x;
int jdown = y ;
int jtop = y ;
int finalIntXLeft;
int finalIntXRight;
int finalIntYTop;
int finalIntYDown;
while(true){
Boolean aBoolean = checkHaveBeen(--ileft, y);
if(!aBoolean){
finalIntXLeft = ++ileft;
break;
}
if(ileft<-1000000){
System.out.println("计算失败");
return;
}
}
while(true){
Boolean aBoolean = checkHaveBeen(++iright, y);
if(!aBoolean){
finalIntXRight = --iright;
break;
}
if(iright>1000000){
System.out.println("计算失败");
return;
}
}
while(true){
Boolean aBoolean = checkHaveBeen(x, --jdown);
if(!aBoolean){
finalIntYDown = ++jdown;
break;
}
if(jdown<-1000000){
System.out.println("计算失败");
return;
}
}
while(true){
Boolean aBoolean = checkHaveBeen(x, ++jtop);
if(!aBoolean){
finalIntYTop = --jtop;
break;
}
if(jtop>1000000){
System.out.println("计算失败");
return;
}
}
int divisionX = finalIntXRight-finalIntXLeft;
int divisionY = finalIntYTop-finalIntYDown;
int calArea = divisionX*divisionY;
int calAllLong =(divisionX+divisionY)*2;
System.out.println("棋盘面积"+calArea);
System.out.println("棋盘周长"+calAllLong);
}
}
//这个方法相当于题目new Boolean[i][j]
public static Boolean checkHaveBeen(int i,int j){
//我将棋盘左下角放于坐标原点上,不这么放置也行,只要能正常返回棋子是否在棋盘内
if(i>100 || j>100 || i<0 || j<0){
return Boolean.FALSE;
}
return Boolean.TRUE;
}
}