Java练习题,可能是循环,第三个,大家帮我看看

img

public class Test {
    public void print(int lineSum) {
        int sum = (lineSum + 1) * lineSum / 2;
        int p = 0;
        List<List<Integer>> lists = new ArrayList<>();
        //  1  2  -1  -2
        int dir = 1;
        int line = -1;
        while (p++ < sum) {
            line += dir > 0 ? 1 : (dir == -1 ? -1 : 0);
            if (line >= lists.size()) {
                List<Integer> list = new LinkedList<>();
                list.add(p);
                lists.add(list);
                dir = dir == 1 ? 2 : -1;
            } else {
                lists.get(line).add(p);
                dir = dir > 0 ? dir : (dir == -1
                        ? (line == 0 ? -2 : -1)
                        : 1);
            }
        }

        printVals(lists);
    }

    public static void main(String[] args) {
        Test solution = new Test();
        solution.print(10);
    }
}

输出示例

img


public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        List<List<Integer>> ans = main.getList(10);
        //输出
        int n = ans.size();
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n-i; j++){
                System.out.print(ans.get(i).get(j));
                System.out.print("\t");
            }System.out.println();
        }
    }

    private List<List<Integer>> getList(int n){
        List<List<Integer>> ans = new ArrayList<>();
        for(int i = 0; i < n; i++){
            ans.add(new ArrayList<>());
        }
        //最大数一共有n行,每行比前一行少一个符合等差数列,求到最大值
        int maxNum = (1+n)*n/2;
        int i = 0;
        int j = 0;
        //规律:向下走一步,向右上走多步直到i==0,向右走一步,向左下走n步直到j==0
        int[][] direct = new int[][]{{1,0},{-1,1},{0,1},{1,-1}};
        int index = 0;
        for(int num = 1; num<=maxNum; num++){
            ans.get(i).add(num);
            i = i+direct[index][0];
            j = j+direct[index][1];
            if(index == 0||index==2||(index == 1 && i == 0)||(index == 3 && j == 0))
                ++index;
            index = index%4;
        }
        
        return ans;
    }

}
List<String> list=new ArrarList();
声明一个只包含String类型的list集合