-1
public static void printGrid(int rows, int cols) {
    int totalNum = rows * cols;
    for (int i = 1; i <= rows; i++) {
        for (int k = 0; k < cols; k++) {
            System.out.print(i + rows * k + ", ");
        } System.out.println();      
    }
}

Outputs = 1, 4, 7, 10, 13, 16, 
          2, 5, 8, 11, 14, 17, 
          3, 6, 9, 12, 15, 18, 

我想通过每行中的最后一个数字删除尾随逗号,但我没有一个变量作为保存它们的字符串,只是一个打印语句。有没有办法做到这一点?

4

3 回答 3

8

Simply, print it only when needed:

public static void printGrid(int rows, int cols) {
    int totalNum = rows * cols;
    for (int i = 1; i <= rows; i++) {
        for (int k = 0; k < cols; k++) {
            System.out.print(i + rows * k);
            if (k < cols - 1) System.out.print(", ");
        }
        System.out.println();      
    }
}

Output for args 3, 6 would be:

1, 4, 7, 10, 13, 16
2, 5, 8, 11, 14, 17
3, 6, 9, 12, 15, 18
于 2015-01-09T22:30:54.917 回答
1

虽然您可以按照@MightyPork在该答案中的建议在后置条件下打印后进行测试

System.out.print(i + rows * k);
if (k < cols - 1) {
    System.out.print(", ");
}

我会测试它k不是0并在它不处于前提条件时打印逗号

if (k != 0) {
    System.out.print(", ");
}
System.out.print(i + rows * k);
于 2015-01-09T22:41:43.017 回答
-1

如果您的代码难以理解,效率并不重要。部分问题在于您尝试将字符串组合与输出相结合的方式。你应该把这些东西完全分开:

static void printGrid(int rows, int cols) {
    System.out.println(getGrid(rows, cols));
}

static String getGrid(int rows, int cols) {
    StringBuilder b = new StringBuilder();
    int totalNum = rows * cols;

    for (int i = 1; i <= rows; i++) {
        for (int k = 0; k < cols; k++) {
            b.append(i + rows * k).append(", ");
        }
        b.delete(b.size()-2,b.size());
        b.append('\n');  
    }
    return b.toString();
}

或者,您可以使用 Guava Joiner,或者在 Java 8 中您可以使用 Collectors.joining

于 2015-01-09T23:05:24.230 回答