今天一個面試官老大哥,讓我用springboot實現一個前後端交互的小例子,要求前端輸入一個二維數組,提交後返回的數據 順時針 打印出來,前後端交互問題是不大,主要是順時針打印如圖:
順時針打印的意思如下圖:
要求的結果如下圖:
結果搞半天弄不出來,後來面試結束,我不死心,最後用笨方法來解決了;
這裏請教各位有什麼好的辦法來解決嗎?
(下面粘貼我的代碼)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js"></script>
<style type="text/css">
.line{
margin-left: 200px;
padding: 10px;
}
#desc{
width: 300px;
height: 150px;
}
</style>
</head>
<body>
<div class="line">
<label>賬號:</label><input type="text" id="account"/>
</div>
<div class="line">
<label>密碼:</label><input type="password" id="password"/>
</div>
<div class="line">
<label>描述:</label>
<textarea id="desc">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,33,34,35;
36,37,38,39,40,41,42;
43,44,45,46,47,48,49;
50,51,52,53,54,55,56</textarea>
</div>
<div class="line">
<button id="submit" type="button">提交</button>
</div>
<div class="line" >
<p id="result"></p>
</div>
<script type="text/javascript">
$(function(){
$(document).on("click","#submit",login);
});
function login(){
var data = {
account:$("#account").val(),
password:$("#password").val(),
desc:$("#desc").val()
};
console.log(data);
$.ajax({
url:"/login",
type:"POST",
dataType:"JSON",
data:data,
success:function(res){
$("#result").html("結果:\n" + res.content);
},
error:function(){
console.log("網絡異常!");
}
});
}
</script>
</body>
</html>
package com.example.demo2.controller;
import com.example.demo2.InfoDto;
import com.example.demo2.common.Result;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class LoginController {
@PostMapping("login")
@ResponseBody
public Result<String> login(InfoDto dto){
Result<String> result = new Result<>();
StringBuilder sb = new StringBuilder();
sb.append("賬號:").append(dto.getAccount()).append("<br/>");
sb.append("密碼:").append(dto.getPassword()).append("<br/>");
//獲取二維數組
String[][] arrays = getParams(dto.getDesc().trim());
//獲取最小邊
int min = getMin(arrays);
List<String> res = new ArrayList<>();
int x = 0, y = 0;
for(int i=0; i< min; i++){
//更新起點
x=y=i;
//System.out.println(printLine(i,i,arrays));
res.addAll(printLine(i,i,arrays));
//更新起點
x=1+i;
y=arrays[0].length - 1 - i;
//System.out.println(printCol(x ,y,arrays));
res.addAll(printCol(x ,y,arrays));
//更新起點
x=(arrays.length - 1) - i;
y=(arrays[0].length - 1) -1 - i;
//System.out.println(_printLine(x ,y,arrays));
res.addAll(_printLine(x,y,arrays));
//更新起點
x=(arrays.length - 1) - 1 - i;
y= i;
//System.out.println(_printCol(x ,y,arrays));
res.addAll(_printCol(x,y,arrays));
}
System.out.println(res.toString());
result.setCode(200);
result.setMsg("成功");
sb.append("順時針轉:").append("<br/>");
sb.append(res);
result.setContent(sb.toString());
return result;
}
// 橫向從做到又
private List<String> printLine(Integer x, Integer y, String[][] arrays){
List<String> list = new ArrayList<>();
int current = x;
for(int i=x; i<arrays[0].length-current; i++){
list.add(arrays[x][i].trim());
}
return list;
}
// 豎向從上到下
private static List<String> printCol(Integer x, Integer y, String[][] arrays){
List<String> list = new ArrayList<>();
int current = x - 1;
for(int i=x; i<arrays.length - current; i++){
list.add(arrays[i][y].trim());
}
return list;
}
// 很向從右到左
private static List<String> _printLine(int x, int y, String[][] arrays){
List<String> list = new ArrayList<>();
int maxIndex = (arrays.length - 1);
int current = maxIndex - x;
for (int i = y; i >= 0 + current; i--) {
list.add(arrays[x][i].trim());
}
return list;
}
// 豎向從下到上
private static List<String> _printCol(int x, int y, String[][] arrays){
List<String> list = new ArrayList<>();
int current = y;
for (int i = x; i >= 0 + (current+1); i--) {
list.add(arrays[i][y].trim());
}
return list;
}
// 截取字符串, 獲取二維數組
private String [][] getParams(String source){
String [][] resArray = {};
String[] firstArray = source.split(";");
for (int i=0; i<firstArray.length; i++) {
String[] secArray = firstArray[i].trim().split(",");
if(i==0){
resArray = new String[firstArray.length][secArray.length];
}
resArray[i]= secArray;
}
return resArray;
}
//獲取最小邊
private int getMin(String[][] arrays){
int len1 = arrays.length;
int len2 = arrays[0].length;
int min = Integer.min(len1,len2);
if(min % 2 == 0){
return min/2;
}else{
return min/2 + 1;
}
}
}
最後打印的效果如下: