Java中的交叉单词游戏

Java中的交叉单词游戏,java,Java,我已经坚持这个练习两周了,希望有人能帮我 因此,基本上,用户首先提供行数和列数以及相应的交叉字表(这是一个2d字符数组),然后输入字数以及必须在该板中检测的字 程序应该打印给定的表格,但每个非单词都替换为零 例如: 输入: 应输出: G000P A000M M000U E000J 我的问题仍然是找单词的方法 这是我的代码(注释为更容易理解) 注意:不能在对角线上找到单词。。。我还缺少程序中应该用非单词替换零的部分,因为我仍然找不到单词 import java.util.Scanner; cla

我已经坚持这个练习两周了,希望有人能帮我

因此,基本上,用户首先提供行数和列数以及相应的交叉字表(这是一个2d字符数组),然后输入字数以及必须在该板中检测的字

程序应该打印给定的表格,但每个非单词都替换为零

例如: 输入:

应输出:

G000P
A000M
M000U
E000J
我的问题仍然是找单词的方法

这是我的代码(注释为更容易理解)

注意:不能在对角线上找到单词。。。我还缺少程序中应该用非单词替换零的部分,因为我仍然找不到单词

import java.util.Scanner;
class game {
  private int rows;
  private int cols;
  private char m[][];

  game(int r, int c)
  {
    rows = r;
    cols = c;
    m = new char[r][c];
  }
  //read the game
  public void read(Scanner in) {
          for (int i=0; i<rows; i++) {
            m[i] = in.next().toCharArray();
          }
  }



  //writes the game
  public void write() {
    for(int i = 0; i < rows;i++)
    {
      for(int j = 0; j < cols; j++)
      {
        System.out.print(m[i][j]);
      }
      System.out.println();
    }
  }

  //finds the words
  public void find(String word) {
      for(int i = 0; i < rows; i++)
      {
          if(word.equals(new String(m[i]))){
              System.out.print(i);

        }
      }
      for(int z = 0; z < cols; z++)
      {
          if(word.equals(new String(m[z]))) {
              System.out.print(z);
          }
      }

  }

}


public class wordg {
  public static void main(String[] args) {
      Scanner scan = new Scanner(System.in);

      int rows = scan.nextInt();

      int columns = scan.nextInt();

      game j = new game(rows,columns);

      j.read(scan);

      //j.write();

      int wordnumber = scan.nextInt();

        String words[] = new String[wordnumber];

        for(int i = 0; i < wordnumber; i++)
        {
          words[i] = scan.nextLine();
        }

        for(int w = 0; w < words.length; w++)
        {
          j.find(words[w]);
        }

  }
}

import java.util.Scanner;
班级游戏{
私有int行;
私人公司;
私有字符m[][];
游戏(int r,int c)
{
行=r;
cols=c;
m=新字符[r][c];
}
//阅读游戏
公共无效读取(扫描仪输入){

对于(int i=0;i如何修复代码

在回答的这一部分中,我将尝试提供一个关于如何使代码正常工作的分步指南:

代码的第一个问题是您使用的是行而不是列,尽管您显然希望使用列。可以这样做:

String col = "";
for(int i = 0; i < rows; i++) { 
    col += m[i][z];
}
public String reverse(String word) {
    String result = "";
    for(int i = word.length() - 1; i >= 0; i--) {
        result += word.charAt(i);
    }
    return result;
}
if(word.equals(new String(m[i]))){
    System.out.println("Word found in row: " + i);  
    for(int j = 0; j < cols; j++) {
        test[i][j] = true;                               
    }
}
public void find(String word) {
    for(int i = 0; i < rows; i++) {
        int index = new String(m[i]).indexOf(word);             //Index were found word starts (-1 if row/col doesn't contain the word)
        if(index >= 0) {
            System.out.println("Word found in row: " + i);      //Added some information for the user
            for(int j = index; j < index + word.length(); j++) {
                test[i][j] = true;                              //Save that word was found in this "cell"
            }
        }       
    }

    for(int z = 0; z < cols; z++) {
        String col = "";
        for(int i = 0; i < rows; i++) {                         //Get column
            col += m[i][z];
        }
        int index = col.indexOf(word);
        if(index >= 0) {
            System.out.println("Word found in col: " + z);
            for(int j = index; j < index + word.length(); j++) {
                test[j][z] = true;
            }
        }
    }
}
相反的方法可能如下所示:

String col = "";
for(int i = 0; i < rows; i++) { 
    col += m[i][z];
}
public String reverse(String word) {
    String result = "";
    for(int i = word.length() - 1; i >= 0; i--) {
        result += word.charAt(i);
    }
    return result;
}
if(word.equals(new String(m[i]))){
    System.out.println("Word found in row: " + i);  
    for(int j = 0; j < cols; j++) {
        test[i][j] = true;                               
    }
}
public void find(String word) {
    for(int i = 0; i < rows; i++) {
        int index = new String(m[i]).indexOf(word);             //Index were found word starts (-1 if row/col doesn't contain the word)
        if(index >= 0) {
            System.out.println("Word found in row: " + i);      //Added some information for the user
            for(int j = index; j < index + word.length(); j++) {
                test[i][j] = true;                              //Save that word was found in this "cell"
            }
        }       
    }

    for(int z = 0; z < cols; z++) {
        String col = "";
        for(int i = 0; i < rows; i++) {                         //Get column
            col += m[i][z];
        }
        int index = col.indexOf(word);
        if(index >= 0) {
            System.out.println("Word found in col: " + z);
            for(int j = index; j < index + word.length(); j++) {
                test[j][z] = true;
            }
        }
    }
}
在此之后,您的
find
-方法应该可以工作

要按您希望的方式输出网格,我们必须保存找到单词的位置。可以这样做:

String col = "";
for(int i = 0; i < rows; i++) { 
    col += m[i][z];
}
public String reverse(String word) {
    String result = "";
    for(int i = word.length() - 1; i >= 0; i--) {
        result += word.charAt(i);
    }
    return result;
}
if(word.equals(new String(m[i]))){
    System.out.println("Word found in row: " + i);  
    for(int j = 0; j < cols; j++) {
        test[i][j] = true;                               
    }
}
public void find(String word) {
    for(int i = 0; i < rows; i++) {
        int index = new String(m[i]).indexOf(word);             //Index were found word starts (-1 if row/col doesn't contain the word)
        if(index >= 0) {
            System.out.println("Word found in row: " + i);      //Added some information for the user
            for(int j = index; j < index + word.length(); j++) {
                test[i][j] = true;                              //Save that word was found in this "cell"
            }
        }       
    }

    for(int z = 0; z < cols; z++) {
        String col = "";
        for(int i = 0; i < rows; i++) {                         //Get column
            col += m[i][z];
        }
        int index = col.indexOf(word);
        if(index >= 0) {
            System.out.println("Word found in col: " + z);
            for(int j = index; j < index + word.length(); j++) {
                test[j][z] = true;
            }
        }
    }
}
此时,程序应该产生您希望它产生的输出


可能的改进

如果要改进
查找方法
,可以让程序识别行或列中的单词,例如,识别此网格中的单词“you”:

AAYOUA
AAAAA
AAAAA
AAAAA
可以这样做:

String col = "";
for(int i = 0; i < rows; i++) { 
    col += m[i][z];
}
public String reverse(String word) {
    String result = "";
    for(int i = word.length() - 1; i >= 0; i--) {
        result += word.charAt(i);
    }
    return result;
}
if(word.equals(new String(m[i]))){
    System.out.println("Word found in row: " + i);  
    for(int j = 0; j < cols; j++) {
        test[i][j] = true;                               
    }
}
public void find(String word) {
    for(int i = 0; i < rows; i++) {
        int index = new String(m[i]).indexOf(word);             //Index were found word starts (-1 if row/col doesn't contain the word)
        if(index >= 0) {
            System.out.println("Word found in row: " + i);      //Added some information for the user
            for(int j = index; j < index + word.length(); j++) {
                test[i][j] = true;                              //Save that word was found in this "cell"
            }
        }       
    }

    for(int z = 0; z < cols; z++) {
        String col = "";
        for(int i = 0; i < rows; i++) {                         //Get column
            col += m[i][z];
        }
        int index = col.indexOf(word);
        if(index >= 0) {
            System.out.println("Word found in col: " + z);
            for(int j = index; j < index + word.length(); j++) {
                test[j][z] = true;
            }
        }
    }
}
WordG.java

import java.util.Scanner;

public class Game {                                                 //Classes start with uppercase
    private int rows;
    private int cols;
    private char m[][];
    private boolean test[][];                                       //Purpose: test if "cell" where word was found

    Game(int r, int c) {
        rows = r;
        cols = c;
        m = new char[r][c];
        test = new boolean[r][c];
    }
    //read the game
    public void read(Scanner in) {
        for (int i=0; i<rows; i++) {
            m[i] = in.next().toCharArray();
        }
    }

    //writes the game
    public void write() {
        for(int i = 0; i < rows;i++) {
            for(int j = 0; j < cols; j++) {
                if(test[i][j]) {                                    //Only print found words, otherwise print "0"
                    System.out.print(m[i][j]);
                }
                else {
                    System.out.print("0");
                }               
            }
            System.out.println();
        }
    }

    //finds the words
    public void find(String word) {
        for(int i = 0; i < rows; i++) {
            int index = new String(m[i]).indexOf(word);             //Index were found word starts (-1 if row/col doesn't contain the word)
            if(index >= 0) {
                System.out.println("Word found in row: " + i);      //Added some information for the user
                for(int j = index; j < index + word.length(); j++) {
                    test[i][j] = true;                              //Save that word was found in this "cell"
                }
            }       
        }

        for(int z = 0; z < cols; z++) {
            String col = "";
            for(int i = 0; i < rows; i++) {                         //Get column
                col += m[i][z];
            }
            int index = col.indexOf(word);
            if(index >= 0) {
                System.out.println("Word found in col: " + z);
                for(int j = index; j < index + word.length(); j++) {
                    test[j][z] = true;
                }
            }
        }
    }

    public String reverse(String word) {
        String result = "";
        for(int i = word.length() - 1; i >= 0; i--) {
            result += word.charAt(i);
        }
        return result;
    }
}
import java.util.Scanner;

public class WordG {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int rows = scan.nextInt();
        int columns = scan.nextInt();
        Game j = new Game(rows,columns);
        j.read(scan);       
        int wordnumber = scan.nextInt();
        scan.nextLine();                            //To clear the scanner
        String words[] = new String[wordnumber];

        for(int i = 0; i < wordnumber; i++) {
            words[i] = scan.nextLine();
        }
        for(int w = 0; w < words.length; w++) {
            j.find(words[w]);
            j.find(j.reverse(words[w]));            //You also have to search for reversed words!
        }
        j.write();                                  //Write grid after searching
    }
}
随着功能的增加,输入

5
鲨鱼
阿尤布
MABCD
EABCD
ABCDE
3.
你
我
鲨鱼
给出输出

在第1行中找到单词
在列中找到单词:0
在第行中找到单词:0
鲨鱼
0YOU0
M0000
E0000
00000

如何修复代码

在回答的这一部分中,我将尝试提供一个关于如何使代码正常工作的分步指南:

代码的第一个问题是您使用的是行而不是列,尽管您显然希望使用列。可以这样做:

String col = "";
for(int i = 0; i < rows; i++) { 
    col += m[i][z];
}
public String reverse(String word) {
    String result = "";
    for(int i = word.length() - 1; i >= 0; i--) {
        result += word.charAt(i);
    }
    return result;
}
if(word.equals(new String(m[i]))){
    System.out.println("Word found in row: " + i);  
    for(int j = 0; j < cols; j++) {
        test[i][j] = true;                               
    }
}
public void find(String word) {
    for(int i = 0; i < rows; i++) {
        int index = new String(m[i]).indexOf(word);             //Index were found word starts (-1 if row/col doesn't contain the word)
        if(index >= 0) {
            System.out.println("Word found in row: " + i);      //Added some information for the user
            for(int j = index; j < index + word.length(); j++) {
                test[i][j] = true;                              //Save that word was found in this "cell"
            }
        }       
    }

    for(int z = 0; z < cols; z++) {
        String col = "";
        for(int i = 0; i < rows; i++) {                         //Get column
            col += m[i][z];
        }
        int index = col.indexOf(word);
        if(index >= 0) {
            System.out.println("Word found in col: " + z);
            for(int j = index; j < index + word.length(); j++) {
                test[j][z] = true;
            }
        }
    }
}
相反的方法可能如下所示:

String col = "";
for(int i = 0; i < rows; i++) { 
    col += m[i][z];
}
public String reverse(String word) {
    String result = "";
    for(int i = word.length() - 1; i >= 0; i--) {
        result += word.charAt(i);
    }
    return result;
}
if(word.equals(new String(m[i]))){
    System.out.println("Word found in row: " + i);  
    for(int j = 0; j < cols; j++) {
        test[i][j] = true;                               
    }
}
public void find(String word) {
    for(int i = 0; i < rows; i++) {
        int index = new String(m[i]).indexOf(word);             //Index were found word starts (-1 if row/col doesn't contain the word)
        if(index >= 0) {
            System.out.println("Word found in row: " + i);      //Added some information for the user
            for(int j = index; j < index + word.length(); j++) {
                test[i][j] = true;                              //Save that word was found in this "cell"
            }
        }       
    }

    for(int z = 0; z < cols; z++) {
        String col = "";
        for(int i = 0; i < rows; i++) {                         //Get column
            col += m[i][z];
        }
        int index = col.indexOf(word);
        if(index >= 0) {
            System.out.println("Word found in col: " + z);
            for(int j = index; j < index + word.length(); j++) {
                test[j][z] = true;
            }
        }
    }
}
在此之后,您的
find
-方法应该可以工作

要按您希望的方式输出网格,我们必须保存找到单词的位置。可以这样做:

String col = "";
for(int i = 0; i < rows; i++) { 
    col += m[i][z];
}
public String reverse(String word) {
    String result = "";
    for(int i = word.length() - 1; i >= 0; i--) {
        result += word.charAt(i);
    }
    return result;
}
if(word.equals(new String(m[i]))){
    System.out.println("Word found in row: " + i);  
    for(int j = 0; j < cols; j++) {
        test[i][j] = true;                               
    }
}
public void find(String word) {
    for(int i = 0; i < rows; i++) {
        int index = new String(m[i]).indexOf(word);             //Index were found word starts (-1 if row/col doesn't contain the word)
        if(index >= 0) {
            System.out.println("Word found in row: " + i);      //Added some information for the user
            for(int j = index; j < index + word.length(); j++) {
                test[i][j] = true;                              //Save that word was found in this "cell"
            }
        }       
    }

    for(int z = 0; z < cols; z++) {
        String col = "";
        for(int i = 0; i < rows; i++) {                         //Get column
            col += m[i][z];
        }
        int index = col.indexOf(word);
        if(index >= 0) {
            System.out.println("Word found in col: " + z);
            for(int j = index; j < index + word.length(); j++) {
                test[j][z] = true;
            }
        }
    }
}
此时,程序应该产生您希望它产生的输出


可能的改进

如果要改进
查找方法
,可以让程序识别行或列中的单词,例如,识别此网格中的单词“you”:

AAYOUA
AAAAA
AAAAA
AAAAA
可以这样做:

String col = "";
for(int i = 0; i < rows; i++) { 
    col += m[i][z];
}
public String reverse(String word) {
    String result = "";
    for(int i = word.length() - 1; i >= 0; i--) {
        result += word.charAt(i);
    }
    return result;
}
if(word.equals(new String(m[i]))){
    System.out.println("Word found in row: " + i);  
    for(int j = 0; j < cols; j++) {
        test[i][j] = true;                               
    }
}
public void find(String word) {
    for(int i = 0; i < rows; i++) {
        int index = new String(m[i]).indexOf(word);             //Index were found word starts (-1 if row/col doesn't contain the word)
        if(index >= 0) {
            System.out.println("Word found in row: " + i);      //Added some information for the user
            for(int j = index; j < index + word.length(); j++) {
                test[i][j] = true;                              //Save that word was found in this "cell"
            }
        }       
    }

    for(int z = 0; z < cols; z++) {
        String col = "";
        for(int i = 0; i < rows; i++) {                         //Get column
            col += m[i][z];
        }
        int index = col.indexOf(word);
        if(index >= 0) {
            System.out.println("Word found in col: " + z);
            for(int j = index; j < index + word.length(); j++) {
                test[j][z] = true;
            }
        }
    }
}
WordG.java

import java.util.Scanner;

public class Game {                                                 //Classes start with uppercase
    private int rows;
    private int cols;
    private char m[][];
    private boolean test[][];                                       //Purpose: test if "cell" where word was found

    Game(int r, int c) {
        rows = r;
        cols = c;
        m = new char[r][c];
        test = new boolean[r][c];
    }
    //read the game
    public void read(Scanner in) {
        for (int i=0; i<rows; i++) {
            m[i] = in.next().toCharArray();
        }
    }

    //writes the game
    public void write() {
        for(int i = 0; i < rows;i++) {
            for(int j = 0; j < cols; j++) {
                if(test[i][j]) {                                    //Only print found words, otherwise print "0"
                    System.out.print(m[i][j]);
                }
                else {
                    System.out.print("0");
                }               
            }
            System.out.println();
        }
    }

    //finds the words
    public void find(String word) {
        for(int i = 0; i < rows; i++) {
            int index = new String(m[i]).indexOf(word);             //Index were found word starts (-1 if row/col doesn't contain the word)
            if(index >= 0) {
                System.out.println("Word found in row: " + i);      //Added some information for the user
                for(int j = index; j < index + word.length(); j++) {
                    test[i][j] = true;                              //Save that word was found in this "cell"
                }
            }       
        }

        for(int z = 0; z < cols; z++) {
            String col = "";
            for(int i = 0; i < rows; i++) {                         //Get column
                col += m[i][z];
            }
            int index = col.indexOf(word);
            if(index >= 0) {
                System.out.println("Word found in col: " + z);
                for(int j = index; j < index + word.length(); j++) {
                    test[j][z] = true;
                }
            }
        }
    }

    public String reverse(String word) {
        String result = "";
        for(int i = word.length() - 1; i >= 0; i--) {
            result += word.charAt(i);
        }
        return result;
    }
}
import java.util.Scanner;

public class WordG {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int rows = scan.nextInt();
        int columns = scan.nextInt();
        Game j = new Game(rows,columns);
        j.read(scan);       
        int wordnumber = scan.nextInt();
        scan.nextLine();                            //To clear the scanner
        String words[] = new String[wordnumber];

        for(int i = 0; i < wordnumber; i++) {
            words[i] = scan.nextLine();
        }
        for(int w = 0; w < words.length; w++) {
            j.find(words[w]);
            j.find(j.reverse(words[w]));            //You also have to search for reversed words!
        }
        j.write();                                  //Write grid after searching
    }
}
随着功能的增加,输入

5
鲨鱼
阿尤布
MABCD
EABCD
ABCDE
3.
你
我
鲨鱼
给出输出

在第1行中找到单词
在列中找到单词:0
在第行中找到单词:0
鲨鱼
0YOU0
M0000
E0000
00000

也可以对角找到单词吗?使用这个..嘿@Miguel Gomes,你能指出它对哪个输入不起作用吗?单词是否总是垂直和水平的,单词在矩阵中不会是对角的?而且你的代码没有为不属于单词的单元格打印0谢谢,不,单词不能是0nd对角线m[i]或m[z]基本上sameCan单词也是对角线的吗?使用这个..嘿@Miguel Gomes,你能指出它对哪个输入不起作用吗?单词总是垂直和水平的,单词在矩阵中不会是对角线的吗?而且你的代码没有为不属于单词的单元格打印0谢谢你的帮助,不,世界无法对角找到ds m[i]或m[z]基本相同