首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对单词进行排序以在java中生成web输出

对单词进行排序以在java中生成web输出
EN

Stack Overflow用户
提问于 2018-05-24 06:03:59
回答 1查看 66关注 0票数 0

我已经完成了一个我正在编写的java程序。我已经完成了我的代码和所有内容,但是我的输出没有显示正确的方法。假设它看起来像一个web,但我的输出不是。我已经发布了我的代码。我问社区是为了教育目的,而不是为了得到答案。

代码语言:javascript
复制
   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";
    }
}

我的跑步者

代码语言:javascript
复制
    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);
       }

}

}

我的输出

代码语言:javascript
复制
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                

The supposed output click here

EN

回答 1

Stack Overflow用户

发布于 2018-05-24 08:00:03

如果你没有得到正确的输出,我不确定你是否已经完成了你的程序!

像所有的问题一样,关键是在你尝试将你的算法转化为代码之前,先把它找出来。在这种情况下,有一个非常清晰的模式:第一个字符被放置在4个方向上,然后从每个方向上的每个位置拼写出单词,但第一个字符所在的方向除外。

为了清楚地说明这一点,我首先将方向转换为枚举:

代码语言:javascript
复制
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的运动。

接下来,编写在给定方向上输出值的代码:

代码语言:javascript
复制
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)));
}

注意过滤器,以防止在给定的方向上输出单词。

理想情况下,您应该在继续之前为这段代码编写单元测试。

最后,输出四个方向的代码非常简单:

代码语言:javascript
复制
Arrays.stream(Dir.values()).forEach(dir -> setWebAt(input, dir));

其余的是初始化和打印数组的非常简单的填充物。

如果您不熟悉流,可以将它们全部更改为for循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50498127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档