两个题都比较简单
1.打印对角线
输入 n = 3,矩阵是这样的:
1 2 3
4 5 6
7 8 9
打印结果:
1
2 4
3 5 7
6 8
9
3
2 6
1 5 9
4 8
7
public class DidiMatrix {
public void getResult(int n) {
if (n <= 0) {
return;
}
int[][] matrix = getMatrix(n);
// 1
for (int i = 0; i < n; ++i) {
int row = 0;
for (int j = i; j >= 0; --j) {
System.out.print(matrix[row++][j] + " ");
}
System.out.println();
}
// 2
for (int j = n - 1; j > 0; --j) {
int col = n - 1;
for (int i = n - j; i < n; ++i) {
System.out.print(matrix[i][col--] + " ");
}
System.out.println();
}
// 3
for (int i = 0; i < n; ++i) {
int row = 0;
for (int j = n - i - 1; j < n; ++j) {
System.out.print(matrix[row++][j] + " ");
}
System.out.println();
}
// 4
for (int j = 0; j < n - 1; ++j) {
int col = 0;
for (int i = j + 1; i < n; ++i) {
System.out.print(matrix[i][col++] + " ");
}
System.out.println();
}
}
public int[][] getMatrix(int n) {
int[][] matrix = new int[n][n];
int num = 1;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix[i][j] = num++;
}
}
return matrix;
}
public static void main(String[] args) {
DidiMatrix obj = new DidiMatrix();
obj.getResult(3);
}
}
运行结果如下:
2.多线程交替打印ABC
三个线程,按次序打印ABC,无限循环打印。。。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class DidiOrderedPrinter {
private volatile int lock = 1;
public void print(int i) throws Exception {
while (true) {
while (lock != i) ;
System.out.print((char) (64 + i));
if (i % 3 == 0) {
System.out.println();
}
lock = (i % 3 == 0 ? 1 : i % 3 + 1);
}
}
public static void main(String[] args) {
ExecutorService service = Executors.newFixedThreadPool(3);
DidiOrderedPrinter printer = new DidiOrderedPrinter();
Task A = new Task(printer, TaskType.A);
Task B = new Task(printer, TaskType.B);
Task C = new Task(printer, TaskType.C);
service.submit(C);
service.submit(A);
service.submit(B);
}
private static class Task implements Runnable {
private DidiOrderedPrinter printer;
private TaskType type;
public Task(DidiOrderedPrinter ordered, TaskType type) {
this.printer = ordered;
this.type = type;
}
@Override
public void run() {
try {
printer.print(type.val);
} catch (Exception e) {
}
}
}
private enum TaskType {
A(1), B(2), C(3);
private int val;
TaskType(int val) {
this.val = val;
}
public int getVal() {
return val;
}
}
}
运行结果如下: