用java对单词进行排序以生成web输出
我已经用java完成了一个正在开发的程序。我已经完成了我的代码和一切,但我的输出没有显示正确的方式。它应该看起来像一个网络,但我的输出不是。我已经发布了我的代码。我是为了教育的目的而询问社区,但没有得到答案用java对单词进行排序以生成web输出,java,Java,我已经用java完成了一个正在开发的程序。我已经完成了我的代码和一切,但我的输出没有显示正确的方式。它应该看起来像一个网络,但我的输出不是。我已经发布了我的代码。我是为了教育的目的而询问社区,但没有得到答案 import java.util.*; import static java.lang.System.*; public class FancyWordThree { private String[][] mat; public
import java.util.*;
import static java.lang.System.*;
public class FancyWordThree
{
private String[][] mat;
public FancyWordThree(String s)
{
//size the matrix
mat = new String[s.length()*4-3][s.length()*4-3];
//use Arrays.fill() to fill in the matrix with spaces
for (int i = 0; i < mat.length; i++){
Arrays.fill(mat[i], " ");
}
//use a for loop to load in the letters into the matrix
for(int i = 0; i < mat.length; i++){
for(int j = 0; j < mat.length; j++){
int at = 0;
if (i ==mat.length-j-1 && i !=0 || s.length()-j ==i)
mat[i][j] = s.charAt(at)+"";
}
}
}
public String toString()
{
String output="";
for (int i = 0; i < mat.length; i++){
for (int j = 0; j < mat.length; j++){
output = output+mat[i][j];
}
output = output +"\n";`enter code here`
}
return output+"\n\n";
}
}
如果您没有获得正确的输出,我不确定您是否已完成程序 像所有的问题一样,关键是在你试图将算法转化为代码之前先解决它。在这种情况下,有一个非常清晰的模式:第一个字符放在4个方向上,然后单词从每个方向的每个位置拼写出来,但第一个字符放在的方向除外 为了清楚地说明这一点,我首先将方向转换为枚举:
private enum Dir {
NE(+1, +1),
SE(+1, -1),
SW(-1, -1),
NW(-1, +1);
private final int xd;
private final int yd;
private Dir(int xd, int yd) {
this.xd = xd;
this.yd = yd;
}
}
这意味着您可以处理方向,而不必担心如何计算x和y方向的运动
接下来,编写代码以按给定方向输出值:
private void setWebAt(String input, Dir dir) {
int x = (dir.xd + 2) * (input.length() - 1);
int y = (dir.yd + 2) * (input.length() - 1);
Arrays.stream(Dir.values())
.filter(d -> !d.equals(dir))
.forEach(d -> IntStream.range(0, input.length())
.forEach(i -> result[x + i * d.xd][y + i * d.yd] = input.charAt(i)));
}
注意过滤器,以防止在给定方向上输出单词
理想情况下,您应该在继续之前为此代码编写单元测试
最后,输出四个方向的代码非常简单:
Arrays.stream(Dir.values()).forEach(dir -> setWebAt(input, dir));
剩下的是初始化和打印数组的非常简单的填充程序
如果您不熟悉流,可以将它们全部更改为for
循环
private void setWebAt(String input, Dir dir) {
int x = (dir.xd + 2) * (input.length() - 1);
int y = (dir.yd + 2) * (input.length() - 1);
Arrays.stream(Dir.values())
.filter(d -> !d.equals(dir))
.forEach(d -> IntStream.range(0, input.length())
.forEach(i -> result[x + i * d.xd][y + i * d.yd] = input.charAt(i)));
}
Arrays.stream(Dir.values()).forEach(dir -> setWebAt(input, dir));