用于循环的2D字符数组(Java)

时间:2015-01-11 10:19:33

标签: java arrays char

我目前正在解决此问题https://www.hackerrank.com/challenges/encryption

这是我到目前为止所拥有的

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String input = in.nextLine();
    double length = input.length();
    int width = (int) Math.ceil(Math.sqrt(length));
    int height = (int) Math.floor(Math.sqrt(length));
    char[] letters = input.toCharArray();
    char[][] matrix = new char[height][width];
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            if ((j + i * width) < letters.length) {matrix[i][j] = letters[j + i * width];}
        }
    }
    StringBuffer encrypted = new StringBuffer();

    for (int cols = 0; cols < width; cols++) {  
        for (int rows = 0; rows < height; rows++) {
            encrypted.append(matrix[rows][cols]);
        }
        encrypted.append(' ');
    }
    System.out.println(encrypted.toString());
}
}

案件失败&#34; feedthedog&#34; - 我打印&#34; fto ehg ee&#34;而不是答案&#34; fto ehg ee dd。&#34;此外,似乎我永远无法得到第二个for循环的最后一次迭代,我似乎无法找出原因。非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

&#34;确保,身高*宽度&gt; = len(字)&#34;
你在循环中检查这一点,首先是因为高度和宽度已知,因此本质上是不好的。但是你应该用它来检查宽度和高度,如果他们不满足约束就调整它们。锻炼是有缺陷的,因为它没有说是否应首先扩大宽度或高度。

你假设高度始终是地面,宽度总是ciel,而在这种情况下,身高比它应该少一个,这就是为什么它没有完成。

编辑:虽然楼层(sqrt(len(字)))&lt; = width,height&lt; = ceil(sqrt(len(word)))可能意味着width = ... floor,height = ... ciel,这句话写得好像是一种向量,而如果不是这样,他们应该使用分号。但如果是这样,你只需要向后宽度和高度 并且您正在使用cols&lt;宽度,行&lt;高度。

这也不是真正的密码,因为它不可逆。