Java中的2D数组[关闭]

c9x0cxw0  于 11个月前  发布在  Java
关注(0)|答案(3)|浏览(144)

**已关闭。**此问题需要debugging details。目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答问题。
2天前关闭。
Improve this question
给定一个整数二维数组A[1..5, 1..5],找到最大的K,使得在数组的任何一行中,都存在大于或等于K的元素。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;

public class Solution {

    public static void main(String[] args) throws FileNotFoundException {
        Scanner scan = new Scanner(new File("input.txt"));
        PrintStream out = new PrintStream(new File("output.txt"));

        // Create a 2D array to store the input data
        int[][] array = new int[5][5];

        // Read data from the input file into the 2D array
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                    array[i][j] = scan.nextInt();
            }
        }

        // Find the maximum K
        int maxK = Integer.MIN_VALUE;
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (array[i][j] > maxK) {
                    maxK = array[i][j];
                }
            }
        }

        // Write the result to the output file
        out.println(maxK);
    }
}

字符串
我写了一个程序,错误地解决了这个问题,我需要帮助。就我对这个任务的理解,我需要找到阈值,在该阈值以上有等于或大于这个阈值的数字,但我不知道如何解决它。
下面是一个测试用例,用于验证我的代码是否错误地解决了问题:
input.txt:

6  7  9  4  5
 7  0  2  5  6
 5  7 -7  1  7
 5  2  2  8  4
 1  3  3  4  5


预期产出:

5


然而,我的程序给出了以下输出:9
请帮助我解决这个问题。

cotxawn7

cotxawn71#

你的maxK是数组的整体最大值(即所有元素)。但是对于你的任务,你必须找到每行的最大值。然后K是这些元素中的最小值。

int k = Integer.MAX_VALUE;
for (int i = 0; i < numberOfRows; i++) {
  int m = Integer.MIN_VALUE;
  for (int j = 0; j < numberOfColumns; j++) {
    int v = scanner.nextInt();
    if (v > m) m = v;  //find the maximum of the current row
  }
  if (m < k) k = m; //compare the maximum to the current k
}

out.println(k);

字符串

mccptt67

mccptt672#

这个问题很简单,你只需要找到每一行的max数,然后找到所有max数的min值。
这个问题可以用时间O(N)来解决。

public static int findLargest(int[][] arr) {
    int k = Integer.MAX_VALUE;

    for (int row = 0; row < arr.length; row++) {
        int maxRow = Integer.MIN_VALUE;

        for (int col = 0; col < arr[row].length; col++)
            maxRow = Math.max(maxRow, arr[row][col]);

        k = Math.min(k, maxRow);
    }

    return k;
}

字符串

cbeh67ev

cbeh67ev3#

  • 我写了一个程序错误地解决了这个问题 *

首先,请确保关闭 Closeable 对象。
一个典型的方法是使用 *try-with-resources**语句。

try (Scanner scan = new Scanner(new File("input.txt"))) {
    try (PrintStream out = new PrintStream("output.txt")) {
        
    }
}

字符串

  • "..

遍历 * 数组 *,并在每个元素上遍历。

// Find the maximum K
int maxK = array[0][0];
for (int[] r : array)
    for (int v : r) if (v >= maxK) maxK = v;


这里是完整的重构因子。

try (Scanner scan = new Scanner(new File("input.txt"))) {
    // Create a 2D array to store the input data
    int[][] array = new int[5][5];

    // Read data from the input file into the 2D array
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            array[i][j] = scan.nextInt();
        }
    }

    // Find the maximum K
    int maxK = array[0][0];
    for (int[] r : array)
        for (int v : r) if (v >= maxK) maxK = v;

    try (PrintStream out = new PrintStream("output.txt")) {
        // Write the result to the output file
        out.println(maxK);
    }
}


为了演示,这里有一个使用 stream 的例子。

try (Scanner scan = new Scanner(new File("input.txt")).useDelimiter("\\R")) {
    // Find the maximum K
    int maxK
        = scan.tokens()
              .mapToInt(x -> Stream.of(x.trim().split(" +"))
                                   .mapToInt(Integer::parseInt)
                                   .max()
                                   .getAsInt())
              .max()
              .getAsInt();

    try (PrintStream out = new PrintStream("output.txt")) {
        // Write the result to the output file
        out.println(maxK);
    }
}

相关问题