【问题标题】:Picking characters of vector and randomly placing them in a matrix挑选向量的字符并将它们随机放置在矩阵中
【发布时间】:2021-11-28 15:23:56
【问题描述】:

我有一个包含 50 个字符的 String[50],这些字符需要使用 (int)(Math.random() * 3) 放置在 String[10][10] 中,这样循环才会通过整个矩阵将字符放在最后一个位置+无论 math.random 得到什么。 老师提出的这些问题限制了您回答这些问题的方式,这让我发疯了。

    public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);
    System.out.println("Type a phrase.");
    String phrase = entrada.nextLine();
    while (frase.length() > 50) {
        System.out.println("The phrase has to be less than 50 characters. Try again.");
        phrase = entrada.nextLine();
    }
    int carac = phrase.length();
    String[] vector = new String[carac];
    for (int i = 0; i < carac; i++) {
        vector[i] = String.valueOf(phrase.charAt(i));
        System.out.print(vet[i]);
    }
    int position = 0;
    String[][] matrix = new String[10][10];
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            position = (int) (Math.random() * 3);
            matrix[i][j] = vet[i] //this part doesn't make any sense, I'm stuck here.
        }
    }
}

所需输出示例:

【问题讨论】:

  • 我是这样理解的。您需要保持 lastPos + 当前随机数的总和并将字符放在 lastPos 中。但这意味着您需要计算 lastPos 的行和列。如果lastPos = 48,那么row = 48/10 = 4 and c = 48%10 = 8。另外,你描述的方式意味着你可能会覆盖一些刚刚生成的随机数为0的字符。
  • 您可能想与您的老师讨论这个问题,以便根据本文中的 cmets 对预期内容进行一些澄清。

标签: java arrays random


【解决方案1】:

图像显示输入字符串中的字符需要随机分布在矩阵中。

因此,可以“随机”计算步长(最初从 0 到 2,然后从 1 到 3),并且可以使用除法 / 和取模 % 操作重新计算矩阵中的位置

另外,使用这个实现数组vet 似乎是多余的,vet[i] 可以替换为String.valueOf(phrase.charAt(i))

int position = 0;
for (int i = 0; i < carac; i++) {
    int row = position / matrix.length;
    int col = position % matrix[row].length;
    matrix[row][col] = vet[i]; // or just String.valueOf(phrase.charAt(i))
    position += (int)(Math.random() * 3) + 1; // shift by 1 position is needed here!
}

然后可以打印矩阵:

for (int i = 0; i < matrix.length; i++) {
    System.out.print(i + ": ");
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.print((matrix[i][j] == null ? " " : matrix[i][j]));
    }
    System.out.println();
}

样本输出(带移位):

0:  TE  S T  
1: I  N G  S 
2:  E NT  EN 
3: C E       
4:           
5:           
6:           
7:           
8:           
9:           

更新示例输出(移位):

0: TSTI G EN 
1: T NC E    
2:           
3:           
4:           
5:           
6:           
7:           
8:           
9:           

很明显,如果没有 1 的最小移位,来自phrase 的许多字符将在放入矩阵和position = 0 时被覆盖。

【讨论】:

  • 你为什么要这样做? position += 1 + random.nextInt(3);这不是OP所说的。只需添加 random number*3 并且您应该坚持使用 Math.random(),因为这是 OP 使用的,这显然是一项任务。
  • (int)(Math.random() * 3) 可能返回 0,因此位置不会移动。
  • 没错。 OP并没有说要这样做。因此可能会覆盖现有位置。这是直接引用 last position+whatever math.random 得到的。很多细节都丢失了。
  • @Wanderer,在原代码中有几个与变量名不正确有关的问题: 1) while (frase.length() &gt; 50) -- 应该是phrase,没有声明frase; 2) 与vet 相同——声明了vector,缺少vet。此外,预期输出清楚地表明始终存在 1 的最小偏移。
  • 此外,示例图像显示两个字符之间的差异可能是 3,如单词 TESTING 和 SENTENCE 中的 T--E,甚至是 4,如 S---E - 这对于 (int)(Math.random()*3) 是不可行的它提供封闭范围内的随机值[0..2]
猜你喜欢
  • 1970-01-01
  • 2014-04-16
  • 2021-05-22
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2013-01-03
相关资源
最近更新 更多