我已经完成了一个我正在编写的java程序。我已经完成了我的代码和所有内容,但是我的输出没有显示正确的方法。假设它看起来像一个web,但我的输出不是。我已经发布了我的代码。我问社区是为了教育目的,而不是为了得到答案。
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";
}
}我的跑步者
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import static java.lang.System.*;
public class FancyWordThreeRunner
{
public static void main( String args[] ) throws IOException
{
//add code and test cases here
Scanner file = new Scanner(new File ("mofancyword.dat"));
int size = file.nextInt();
file.nextLine();
for(int i = 0; i<size; i++)
{
String word = file.next();
FancyWordThree test = new FancyWordThree(word);
System.out.println(test);
}
}}
我的输出
A
A A
A A
A
A
A
A A
A A
A A
A
A
A
A
A
A
A A
A A
A A
A
A
A
A
A
I
I I
I I
I
I
C
C C
C C
C C
C
C
C
C
C
W
W W
W W
W W
W W
W
W
W
W
W
W
W
W
T
T T
T T
T T
T T
T T
T
T
T
T
T
T
T
T
T
T
T 发布于 2018-05-24 08:00:03
如果你没有得到正确的输出,我不确定你是否已经完成了你的程序!
像所有的问题一样,关键是在你尝试将你的算法转化为代码之前,先把它找出来。在这种情况下,有一个非常清晰的模式:第一个字符被放置在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循环。
https://stackoverflow.com/questions/50498127
复制相似问题