Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Java的Android纵横字谜算法_Java_Android_Algorithm_Crossword - Fatal编程技术网

基于Java的Android纵横字谜算法

基于Java的Android纵横字谜算法,java,android,algorithm,crossword,Java,Android,Algorithm,Crossword,我正在研究交叉单词算法来开发一个单词应用程序。在对StackOverflow进行了大量的谷歌搜索或搜索之后,我终于达到了这一点。但我还不能理解Java中算法的正确实现。下面是我使用的类 public class Crosswords { char[][] cross; int rows; int cols; char[][] numberGrid; boolean startword; final char DEFAULT = ' ';

我正在研究交叉单词算法来开发一个单词应用程序。在对StackOverflow进行了大量的谷歌搜索或搜索之后,我终于达到了这一点。但我还不能理解Java中算法的正确实现。下面是我使用的类

public class Crosswords {

    char[][] cross;
    int rows;
    int cols;
    char[][] numberGrid;
    boolean startword;
    final char DEFAULT = ' ';

    public Crosswords() {
        rows = 50;
        cols = 50;
        cross = new char[rows][cols];
        numberGrid = new char [rows][cols];
        for (int i = 0; i < cross.length;i++){
            for (int j = 0; j < cross[i].length;j++){
                cross[i][j] = DEFAULT;
            }
        }
    }

    public Crosswords(int ros, int colls) {
        rows = ros;
        cols = colls;
        cross = new char[rows][cols];
        numberGrid = new char [rows][cols];
        for (int i = 0;i < cross.length; i++){
            for (int j = 0; j < cross[i].length; j++){
                cross[i][j] = DEFAULT;
            }
        }
    }


    public String toString() {
             String s = new String();
            //String d = new String();
        for (int i = 0; i < rows; i++) {
         for (int j = 0; j < cols; j++){
          s = s + cross[i][j] + " ";
            }
          s = s + "\n";
        }
        return s;
    }


    public void addWordh(String s, int r, int c) {

        int i = 0;

        int j = 0;

        boolean b = true;

        boolean intersectsWord = true;


        if (s.length() > cols) {

            System.out.println(s + " is longer than the grid. Please try another word.");

            return;

        }

        if (c + s.length() > cols) {

            System.out.println(s + " is too long. Please try another word.");

            return;

        }

        if ((r - 2) >= 0) {

            if ((cross[r - 1][c - 1 + s.length()] == DEFAULT) || (cross[r - 1][c - 1 + s.length()] == '*')) {
                intersectsWord = false;
            }

            else { intersectsWord = true;}

            if (intersectsWord == true) {
                System.out.println("The word " + s + " intersects the beginning of another word!");
                return;
            }
        }

        for (i = 0; i < s.length(); i++) {

            if ((cross[r - 1][c - 1 + i] == DEFAULT) || (cross[r - 1][c - 1 + i] == s.charAt(i))) {

                b = true;

            }

            else {

                b = false;

                System.out.println("Unable to add " + s + ". Please try another word.");

                return;}

        }

        if (b == true) {

            if ((s.length() <= cols) && (c + s.length() <= cols) &&

                    (cross[r - 1][c - 1] == s.charAt(0)) || (cross[r - 1][c - 1] == DEFAULT)) {

                while (j < s.length()) {


                    cross[r - 1][c - 1 + j] = s.charAt(j);

                    if (j==0){
                        startword = true;
                    }

                    cross[rows - 1 - (r - 1)][cols - 1 - (c - 1 + j)] = '*';

                    j++;

                }

            }

        }

    }

    public void addWordv(String s, int r, int c) {

        int i = 0;

        int j = 0;

        boolean b = true;

        boolean intersectsWord = true;

        if (s.length() > rows) {

            System.out.println(s + " is longer than the grid. Please try another word.");

        }

        if (r + s.length() > rows) {

            System.out.println(s + " is too long. Please try another word.");

        }

        else {

            if ((r - 2) >= 0) {

                if ((cross[r - 2][c - 1] == DEFAULT) || (cross[r - 2][c - 1] == '*')) {

                    intersectsWord = false;

                }

                else { intersectsWord = true;}

                if (intersectsWord == true) {

                    System.out.println("The word " + s + " intersects the end of another word!");

                    return;

                }

            }
            if ((cross[r - 1 + s.length()][c - 1] == DEFAULT) || (cross[r - 1 + s.length()][c - 1] == '*')) {
                intersectsWord = false;
            }

            else { intersectsWord = true;}

            if (intersectsWord == true) {
                System.out.println("The word " + s + " intersects the end of another word!");
                return;
            }


            for (i = 0; i < s.length(); i++) {

                if ((cross[r - 1 + i][c - 1] == DEFAULT) || (cross[r - 1 + i][c - 1] == s.charAt(i))) {

                    b = true;

                }

                else {

                    b = false;

                    System.out.println("Unable to add " + s + ". Please try another word.");

                    return;}

            }

            if (b == true) {

                if ((s.length() <= rows) && (r + s.length() <= cols) &&

                        (cross[r - 1][c - 1] == s.charAt(0)) || (cross[r - 1][c - 1] == DEFAULT)) {

                    while (j < s.length()) {

                        cross[r - 1 + j][c - 1] = s.charAt(j);

                        if (j==0){
                            startword = true;
                        }

                        cross[rows - 1 - (r - 1 + j)][cols - 1 - (c - 1)] = '*';

                        j++;

                    }

                }

            }
        }

    }

    public void setNumberGrid(){
        numberGrid = new char [rows][cols];
        for (int i = 0; i < cross.length; i++){
            for (int j=0; j < cross[rows].length; j++){
                if (cross[i][j] == DEFAULT){
                    numberGrid[i][j] = (char) 0;
                }
                else if (startword == true){
                    numberGrid[i][j] = (char) -2;
                }
                else {
                    numberGrid[i][j] = (char) -1;
                }
            }
            int count = 1;
            for (i=0; i < cross.length; i++){
                for (int j=0; j < cross[rows].length; j++){
                    if (numberGrid[i][j] == -2){
                        numberGrid[i][j] = (char)count;
                        count++;
                    }
                }
            }
        }
    }

    public String printNumberGrid() {
        for (int i=0; i < cross.length; i++){
            for (int j=0; j < cross[rows].length; j++){
                if (numberGrid[i][j] == (char)-1){
                    numberGrid[i][j] = ' ';
                }
                else if (numberGrid[i][j] == (char)0){
                    numberGrid[i][j] = '#';
                }
            }
        }
        String d = new String();
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++){
                d = d + numberGrid[i][j] + " ";
            }
            d = d + "\n";
        }
        return d;
    }



    public static void main(String[] args) {
        Crosswords g = new Crosswords();
        g.addWordv("rawr", 4, 5);
        g.addWordh("bot", 5, 4);
        g.addWordv("raw", 7, 5);
        g.addWordh("cat", 4, 5);
        g.addWordh("bass", 6, 10);
        System.out.println(g);

        Crosswords c = new Crosswords(20, 20);

        c.addWordh("HELLO", 1, 1);

        c.addWordv("HAPLOID", 1, 1);
        c.addWordh("COMPUTER", 3, 12);

        c.addWordv("CAT", 2, 11);

        c.addWordv("WOAH", 2, 20);
        c.addWordh("PARKING", 20, 5);

        c.addWordv("ARK", 17, 6);
        c.addWordh("AHOY", 6, 18);
        c.addWordv("AHOY", 18, 10);
        c.addWordv("ADVANTAGE", 2, 12);
        c.addWordv("INTERNAL", 2, 18);
        c.addWordh("BANTER", 7, 11);
        c.addWordv("BEAGLE", 5, 12);
        c.addWordh("BASE", 8, 3);
        c.addWordv("BALL", 8, 3);
        c.addWordh("LEFT", 10, 3);
        c.addWordv("SAFE", 8, 5);
        System.out.print(c);
    }
}
公共类纵横字谜{
字符[][]交叉;
int行;
int cols;
char[][]numberGrid;
布尔startword;
最终字符默认值=“”;
公共纵横字谜{
行=50;
cols=50;
交叉=新字符[行][列];
numberGrid=新字符[行][cols];
for(int i=0;icols){
System.out.println(s+“比网格长。请尝试其他单词。”);
返回;
}
如果(c+s.length()>cols){
System.out.println(s+“太长。请尝试其他单词。”);
返回;
}
如果((r-2)>=0){
如果((交叉[r-1][c-1+s.length()]==默认值)| |(交叉[r-1][c-1+s.length()]=='*')){
错误=错误;
}
else{true;}
如果(值==真){
System.out.println(“单词“+s+”与另一个单词的开头相交!”);
返回;
}
}
对于(i=0;i=0){
如果((交叉[r-2][c-1]==默认值)| |(交叉[r-2][c-1]=='*')){
错误=错误;
}
else{true;}
如果(值==真){
System.out.println(“单词“+s+”与另一个单词的结尾相交!”);
返回;
}
}
如果((交叉[r-1+s.length()][c-1]==默认值)| |(交叉[r-1+s.length()][c-1]=='*')){
错误=错误;
}
else{true;}
如果(值==真){
System.out.println(“单词“+s+”与另一个单词的结尾相交!”);
返回;
}
对于(i=0;i
如果纵横字谜的大小是maxSize,并且任何单词的长度都存储在wordLength中,那么您可以使用如下随机方法
int maxSize=20;
int字长=4

    Random random =new Random();
    int r,c;
    //for horizontal
     r=random.nextInt(maxSize-wordLength);
     c=random.nextInt(maxSize);
    //for vertical
     r=random.nextInt(maxSize);
     c=random.nextInt(maxSize-wordLength);

如果行和列已经存在,您可以存储行和列并生成新的行和列。

好的,首先祝贺您获得了好的JAVA代码,但您必须记住,作为操作系统的Android与JAVA不同。首先,作为“main”类的所有类都不使用公共静态void main(String[]args)
。它们扩展了活动。
公共静态void main(字符串args)
对于启动应用程序无效,这意味着该代码永远不会运行

public class Crosswords extends Activity{

    char[][] cross;
    int rows;
    int cols;
    char[][] numberGrid;
    boolean startword;
    final char DEFAULT = ' ';

    public Crosswords() {
        rows = 50;
        cols = 50;
        cross = new char[rows][cols];
        numberGrid = new char [rows][cols];
        for (int i = 0; i < cross.length;i++){
            for (int j = 0; j < cross[i].length;j++){
                cross[i][j] = DEFAULT;
            }
        }
    }

    public Crosswords(int ros, int colls) {
        rows = ros;
        cols = colls;
        cross = new char[rows][cols];
        numberGrid = new char [rows][cols];
        for (int i = 0;i < cross.length; i++){
            for (int j = 0; j < cross[i].length; j++){
                cross[i][j] = DEFAULT;
            }
        }
    }


    public String toString() {
             String s = new String();
            //String d = new String();
        for (int i = 0; i < rows; i++) {
         for (int j = 0; j < cols; j++){
          s = s + cross[i][j] + " ";
            }
          s = s + "\n";
        }
        return s;
    }


    public void addWordh(String s, int r, int c) {

        int i = 0;

        int j = 0;

        boolean b = true;

        boolean intersectsWord = true;


        if (s.length() > cols) {

            System.out.println(s + " is longer than the grid. Please try another word.");

            return;

        }

        if (c + s.length() > cols) {

            System.out.println(s + " is too long. Please try another word.");

            return;

        }

        if ((r - 2) >= 0) {

            if ((cross[r - 1][c - 1 + s.length()] == DEFAULT) || (cross[r - 1][c - 1 + s.length()] == '*')) {
                intersectsWord = false;
            }

            else { intersectsWord = true;}

            if (intersectsWord == true) {
                System.out.println("The word " + s + " intersects the beginning of another word!");
                return;
            }
        }

        for (i = 0; i < s.length(); i++) {

            if ((cross[r - 1][c - 1 + i] == DEFAULT) || (cross[r - 1][c - 1 + i] == s.charAt(i))) {

                b = true;

            }

            else {

                b = false;

                System.out.println("Unable to add " + s + ". Please try another word.");

                return;}

        }

        if (b == true) {

            if ((s.length() <= cols) && (c + s.length() <= cols) &&

                    (cross[r - 1][c - 1] == s.charAt(0)) || (cross[r - 1][c - 1] == DEFAULT)) {

                while (j < s.length()) {


                    cross[r - 1][c - 1 + j] = s.charAt(j);

                    if (j==0){
                        startword = true;
                    }

                    cross[rows - 1 - (r - 1)][cols - 1 - (c - 1 + j)] = '*';

                    j++;

                }

            }

        }

    }

    public void addWordv(String s, int r, int c) {

        int i = 0;

        int j = 0;

        boolean b = true;

        boolean intersectsWord = true;

        if (s.length() > rows) {

            System.out.println(s + " is longer than the grid. Please try another word.");

        }

        if (r + s.length() > rows) {

            System.out.println(s + " is too long. Please try another word.");

        }

        else {

            if ((r - 2) >= 0) {

                if ((cross[r - 2][c - 1] == DEFAULT) || (cross[r - 2][c - 1] == '*')) {

                    intersectsWord = false;

                }

                else { intersectsWord = true;}

                if (intersectsWord == true) {

                    System.out.println("The word " + s + " intersects the end of another word!");

                    return;

                }

            }
            if ((cross[r - 1 + s.length()][c - 1] == DEFAULT) || (cross[r - 1 + s.length()][c - 1] == '*')) {
                intersectsWord = false;
            }

            else { intersectsWord = true;}

            if (intersectsWord == true) {
                System.out.println("The word " + s + " intersects the end of another word!");
                return;
            }


            for (i = 0; i < s.length(); i++) {

                if ((cross[r - 1 + i][c - 1] == DEFAULT) || (cross[r - 1 + i][c - 1] == s.charAt(i))) {

                    b = true;

                }

                else {

                    b = false;

                    System.out.println("Unable to add " + s + ". Please try another word.");

                    return;}

            }

            if (b == true) {

                if ((s.length() <= rows) && (r + s.length() <= cols) &&

                        (cross[r - 1][c - 1] == s.charAt(0)) || (cross[r - 1][c - 1] == DEFAULT)) {

                    while (j < s.length()) {

                        cross[r - 1 + j][c - 1] = s.charAt(j);

                        if (j==0){
                            startword = true;
                        }

                        cross[rows - 1 - (r - 1 + j)][cols - 1 - (c - 1)] = '*';

                        j++;

                    }

                }

            }
        }

    }

    public void setNumberGrid(){
        numberGrid = new char [rows][cols];
        for (int i = 0; i < cross.length; i++){
            for (int j=0; j < cross[rows].length; j++){
                if (cross[i][j] == DEFAULT){
                    numberGrid[i][j] = (char) 0;
                }
                else if (startword == true){
                    numberGrid[i][j] = (char) -2;
                }
                else {
                    numberGrid[i][j] = (char) -1;
                }
            }
            int count = 1;
            for (i=0; i < cross.length; i++){
                for (int j=0; j < cross[rows].length; j++){
                    if (numberGrid[i][j] == -2){
                        numberGrid[i][j] = (char)count;
                        count++;
                    }
                }
            }
        }
    }

    public String printNumberGrid() {
        for (int i=0; i < cross.length; i++){
            for (int j=0; j < cross[rows].length; j++){
                if (numberGrid[i][j] == (char)-1){
                    numberGrid[i][j] = ' ';
                }
                else if (numberGrid[i][j] == (char)0){
                    numberGrid[i][j] = '#';
                }
            }
        }
        String d = new String();
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++){
                d = d + numberGrid[i][j] + " ";
            }
            d = d + "\n";
        }
        return d;
    }



    public void onCreate(Bundle sis) {
        super.onCreate(sis);

        Crosswords g = new Crosswords();
        g.addWordv("rawr", 4, 5);
        g.addWordh("bot", 5, 4);
        g.addWordv("raw", 7, 5);
        g.addWordh("cat", 4, 5);
        g.addWordh("bass", 6, 10);
        System.out.println(g);

        Crosswords c = new Crosswords(20, 20);

        c.addWordh("HELLO", 1, 1);

        c.addWordv("HAPLOID", 1, 1);
        c.addWordh("COMPUTER", 3, 12);

        c.addWordv("CAT", 2, 11);

        c.addWordv("WOAH", 2, 20);
        c.addWordh("PARKING", 20, 5);

        c.addWordv("ARK", 17, 6);
        c.addWordh("AHOY", 6, 18);
        c.addWordv("AHOY", 18, 10);
        c.addWordv("ADVANTAGE", 2, 12);
        c.addWordv("INTERNAL", 2, 18);
        c.addWordh("BANTER", 7, 11);
        c.addWordv("BEAGLE", 5, 12);
        c.addWordh("BASE", 8, 3);
        c.addWordv("BALL", 8, 3);
        c.addWordh("LEFT", 10, 3);
        c.addWordv("SAFE", 8, 5);
        System.out.print(c);
    }
}
公共类纵横字谜扩展活动{
字符[][]交叉;
int行;
int cols;
char[][]numberGrid;
布尔startword;
最终字符默认值=“”;
公共纵横字谜{
行=50;
cols=50;
交叉=新字符[行][列];
numberGrid=新字符[行][cols];
for(int i=0;i