java - 用户在 java 中从一系列行输入的二维数组,以行输入 "end"结尾

标签 java arrays multidimensional-array

这是我的代码。我认为有更好的方法用字符串行中的整数填充矩阵。我的输出显示正确的输出,但它太复杂了。如何让它变得不那么复杂?

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int [][]matrix = new int [7777][7777];
    int counter = 0;
    int counter1 = 0;
    for (int i = 0; i < 7777; i++) {
      String s = scanner.nextLine();
      if (!"end".equals(s)) {
        counter++;
        String s1[] = s.split(" ");
        for (int j = 0; j < s1.length; j++) {
          matrix[i][j] = Integer.parseInt(s1[j]);
          counter1++;
        }
      } else {
        break;
      }
    }
    int v = counter;
    int h = counter1/counter;

    for (int i = 0; i < v; i++) {
      for (int j = 0; j < h; j++) {
        if (v == 1 || h == 1) {
          System.out.print(matrix[i][j]*4 + " ");
        } else if (i == 0){
          if (j == 0){
            System.out.print(matrix[v-1][j] + matrix[i+1][j] + matrix[i][h-1] + matrix[i][j+1] + " ");
          } else if (j != h-1){
            System.out.print(matrix[v-1][j] + matrix[i+1][j] + matrix[i][j-1] + matrix[i][j+1] + " ");
          } else {
            System.out.print(matrix[v-1][j] + matrix[i+1][j] + matrix[i][j-1] + matrix[i][0] + " ");
          }
        } else if (j == 0 && i != v-1){
          System.out.print(matrix[i-1][j] + matrix[i+1][j] + matrix[i][h-1] + matrix[i][j+1] + " ");
        } else if (j != 0 && j != h-1 && i != v-1) {
          System.out.print(matrix[i-1][j] + matrix[i+1][j] + matrix[i][j-1] + matrix[i][j+1] + " ");
        } else if (j == h-1 && i != v-1){
          System.out.print(matrix[i-1][j] + matrix[i+1][j] + matrix[i][j-1] + matrix[i][0] + " ");
        } else if (i == v-1) {
          if (j == 0) {
            System.out.print(matrix[i-1][j] + matrix[0][j] + matrix[i][h-1] + matrix[i][j+1] + " ");
          } else if (j != h-1) {
            System.out.print(matrix[i-1][j] + matrix[0][j] + matrix[i][j-1] + matrix[i][j+1] + " ");
          } else {
            System.out.print(matrix[i-1][j] + matrix[0][j] + matrix[i][j-1] + matrix[i][0] + " ");
          }
        }
      }
      System.out.println();
    }
  }
}

这是任务分配。

编写一个程序,输入一系列行的矩形矩阵,以一行结尾,包含唯一的单词“end”(不带引号)。

程序应输出相同大小的矩阵,其中位置 (i, j) 中的每个元素等于位置 (i-1, j) 上第一个矩阵的元素之和,(i +1,j),(i,j-1),(i,j+1)。边界元素的邻居位于矩阵的另一侧。在一行或一列的情况下,元素本身可能是它的邻居。

示例输入:

9 5 3

0 7 -1

-5 2 9

结束

示例输出:

3 21 22

10 6 19

20 16 -1

最佳答案

是的,这段代码可以简化。

首先,使用数组并不是包含输入的最佳选择,因为您不知道输入大小。使用List可以扩展以适应数据会更容易。此外,使用Stream api,我们可以将输入转换为List<List<Integer>>相当容易。

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

List<List<Integer>> matrix = reader.lines()
    .takeWhile(line -> !line.equals("end"))
    .map(line -> Arrays.stream(line.split(" "))
        .map(Integer::valueOf)
        .collect(Collectors.toList()))
    .collect(Collectors.toList());

现在我们的列表中已有数据,我们将计算宽度和高度的大小。

int height = matrix.size();
int width = matrix.get(0).size();

计算 (i-1, j), (i+1, j), (i, j-1), (i, j+1) 的位置没有IndexOutOfBoundsException有点棘手,但是您可以使用这个模公式。只要offset不负大于 size这会起作用。如果这是一个问题,您还可以使用偏移量的模

(size + index + offset) % size
// or
(size + index + (offset % size)) % size

要将字符串与空格添加在一起,您可以使用 StringJoiner .

for (int i = 0; i < height; i++) {
    StringJoiner joiner = new StringJoiner(" ");
    for (int j = 0; j < width; j++) {
        int value = matrix.get((height + i - 1) % height).get(j)
            + matrix.get((height + i + 1) % height).get(j)
            + matrix.get(i).get((width + j - 1) % width)
            + matrix.get(i).get((width + j + 1) % width);
        joiner.add(String.valueOf(value));
    }
    System.out.println(joiner.toString());
}

关于java - 用户在 java 中从一系列行输入的二维数组,以行输入 "end"结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638812/

相关文章:

java - 使用 DiskLruCache 时出现正则表达式错误 (Jake Wharton)

java - 动态创建对象时未找到类 - Java

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

javascript - Express Subscribe 调用中的 JSON 数组出现 Angular HTML 绑定(bind)错误

php - 在多维数组中查找最大值

arrays - 为什么我们不能有 2D UIImage 数组?

java - 使用 jar 文件的循环复杂度

Java 从网络摄像头获取图像并通过套接字发送

c - 数组加载问题

c++ - 文本文件中的值未写入二维数组?