【问题标题】:Change int to string in a matrix将 int 更改为矩阵中的字符串
【发布时间】:2018-05-03 20:25:26
【问题描述】:

我想根据规则将一些整数转换为 *。我可以确定它应该转换矩阵中的哪些位置,但不能转换它。 我给程序第一个矩阵,它应该返回第二个矩阵:

5 4 5 5 8
5 4 6 4 1
3 4 5 4 6
7 8 4 3 6

5 4 5 5 *
5 4 * 4 1
3 4 5 4 6
7 * 4 3 6

我的代码是这样的:

for(int i=1; i<r-1; i++) {
  for(int a=1; a<c-1; a++){
    if(matrix[i-1][a] < matrix[r][a] && matrix[i+1][a] < matrix[r][a] && matrix[i][a-1] < matrix[r][a] && 
       matrix[i][a+1] < matrix[r][a]) {
      matrix[r][a] = *;
    }
  }
}

编辑: 矩阵是 int 类型。我可以确定应该转换矩阵中的哪些位置,但是转换本身不起作用。

我收到此错误:错误:令牌“*”上的语法错误,表达式无效

【问题讨论】:

  • 你有什么例外?有很多原因。
  • 您认为int 的值究竟是多少?
  • matrix 数据类型是什么?
  • 看来matrix是int
  • @CryogenicNeo "如果矩阵存储 int 值,则不能存储 string 或 char 值。" - 这只是部分正确。 chars 可以扩大到int。

标签: java string int


【解决方案1】:

您可以使用Integer 类型的矩阵代替int,然后用null 标记* 单元格

然后在打印或使用矩阵时显示null 值和*

【讨论】:

  • @Turing85 用一个简单的if 可以检查null 值。 null 值的好处是它始终是无效值,您将来可能需要任何其他假定的无效值,例如 Integer.MAX_VALUE 或其他
  • 我更喜欢使用int 而不是Integer 在可能的地方
  • 当然。永远如此null。然而,NPE 是最突出的例外,有些语言,如 Kotlin,明确尝试添加 null-safety。
【解决方案2】:

您可以离开int[][] matrix,例如用一些非法数字标记* 单元格(例如Integer.MAX_VALUE)。当您打印或使用此矩阵时,请点赞:System.out.print(matrix[i][k] != Integer.MAX_VALUE ? matrix[i][k] : '*')

public static void main(String... args) {
    int[][] matrix = new int[5][5];
    modifyMatrix(matrix);
    print(matrix);
}

public static void modifyMatrix(int[][] matrix) {
    for (int row = 0; row < matrix.length; row++)
        for (int col = 0; col < matrix[row].length; col++)
            if (isStar(row, col, matrix))
                matrix[row][col] = Integer.MAX_VALUE;
}

private static boolean isStar(int row, int col, int[][] matrix) {
    // TODO your condition to place a '*'
    return false;
}

private static void print(int[][] matrix) {
    for (int row = 0; row < matrix.length; row++) {
        for (int col = 0, max = matrix[row].length; col < msx; col++) {
            System.out.print(matrix[row][col] != Integer.MAX_VALUE ? matrix[row][col] : '*');
            System.out.println(col != max - 1 ? ' ' : '\0');
        }
        System.out.println();
    }
}

【讨论】:

    【解决方案3】:

    在 int 矩阵中不能放置字符或符号(如 '*')

    最简单的方法是改变矩阵的类型。您应该使用 char 而不是 int。

      char[][] matrix = new char[r][c];
    

    如果您想将矩阵中的元素用于方程式,您可以使用

    Character.getNumericValue(matrix[i][j]);
    

    使用此代码,它将返回数字,如果它没有数值,它将返回 -1

    您可以查看此链接以获取 getNumericValue 点击here

    【讨论】:

    • 如果我们想要多于一位的数字怎么办?例如23这是两个字符或789是三个字符所以我们必须使用String而不是char
    • 他给我们的例子只是一个数字。如果他想使用多个字符,他可以使用 String[][] 但他必须对代码稍作改动。而不是 Character.getNumericValue(matrix[i][j]);他可以使用 for(int k =0; i
    【解决方案4】:

    您应该创建一个与矩阵大小相同的新字符串数组。

    然后通过你的矩阵运行并添加数字或将其更改为字符串,如下所示:

    public String[] convert(int[] matrix,int rule) {
        String[][] arr = new String[matrix.length][matrix[0].length];
        for(int i = 0;i<matrix.length;i++) {
            for(int j = 0; j<matrix[i].length;j++) {
                if(matrix[i][j] == rule)
                    arr[i][j] = "*";
                else
                   arr[i][j] = String.valueOf(matrix[i][j]);
        return arr;
    

    【讨论】:

      猜你喜欢
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多