在ArrayList

时间:2017-10-23 04:21:07

标签: java string arraylist char

我有一个填字游戏。我需要打印信息并让用户插入答案。但是我在比较用户给我的ArrayList时遇到了麻烦。我不知道错误在哪里。你能帮忙吗?

以下是与档案的链接: https://drive.google.com/open?id=0B2WgC5JnH2wfUWw5TWVzdmpoLTA

这是Java代码:

public class Letra {


    private char caracter;

    /**
     * Construye una Letra <br>
     * <b>post: </b> Se construye una letra con un caracter dado
     * @param caracter - caracter representado por la Letra
     */
    public Letra(char caracter){
        this.caracter = caracter;
    }

    //métodos dar y cambiar
    public char darCaracter() {
        return caracter;
    }

    public boolean esIgual(char c){
        return caracter==c;
    }

}

这是第一个。

public class Palabra {

    // Atributos
    private Letra[] letras;


    public Letra[] darLetras() {
        return letras;
    }
    /**
     * 
     * @param p
     * @return
     */

    public boolean esIgual(Palabra p){

        boolean iguales = letras.length==p.darLetras().length;

        for (int i = 0; i < letras.length && iguales; i++) {

            iguales &= letras[i].esIgual(p.darLetras()[i].darCaracter());

        }

        return iguales;
    }
}

这是第二个。

public class Crucigrama {

    //Constantes
    public final static int FILASC = 10;
    public final static int COLUMNASC = 23;

    // Atributos
    // Matriz de caracteres que componen el crucigrama
    private Letra[][] caracteres;

    // Lista de respuestas del crucigrama
    private ArrayList<Palabra> respuestas;

    // Lista de respuestas correctas del crucigrama
    private ArrayList<Palabra> encontradas;

    // Lista de preguntas verticales del crucigrama
    private ArrayList<String> preguntasV;

    // Lista de preguntas horizontales del crucigrama
    private ArrayList<String> preguntasH;


    // Métodos dar
    public Letra[][] darCaracteres() {
        return caracteres;
    }

    public ArrayList<Palabra> darRespuestas() {
        return respuestas;
    }

    public ArrayList<String> darPreguntasV() {
        return preguntasV;
    }

    public ArrayList<String> darPreguntasH() {
        return preguntasH;
    }


    /**
     * Este método sirve para buscar en la pregunta especificada por el usuario,
     * si la respuesta dada es correcta. <br>
     * <b>post: </b> La lista de palabras encontradas se actualizó con la
     * respuesta correcta
     * 
     * @param pregunta
     *            - Es un entero con la pregunta seleccionada por el usuario y
     *            la cual va a buscar la respuesta
     * @param respuesta
     *            - Es una cadena con la respuesta digitada por el usuario
     * @return Retorna un mensaje indicando si la respuesta es incorrecta o
     *         correcta
     */
    public String buscarRespuesta(int tipo,  int pregunta, String respuesta) {
        String result = "";
            if(darRespuestas().get(pregunta-1).equals(respuesta)){  
            result = "Correcta";
        return result;
    }

    /**
     * Este método permite actualizar la matriz de caracteres del crucigrama,
     * con las respuestas correctas dadas por el usuario. debe tener en cuenta
     * si la pregunta es vertical u horizontal <br>
     * <b>post: </b> La matriz de caracteres ha sido actualizada
     * 
     * @param pregunta
     *            - Es un entero con la pregunta seleccionada por el usuario,
     *            para buscarla en la matriz y actualizarla con la respuesta
     * 
     * @param respuesta
     *            - Es una cadena con la respuesta correcta
     * @param tipo
     *            - Es un entero con el tipo de la pregunta, 1 si es horizontal,
     *            2 si es vertical
     * 
     */
    public void actualizarCrucigrama(int pregunta, String respuesta, int tipo) {

    }
}

这是第三个

public class InterfazCrucigrama {

    private Crucigrama crucigrama;

    public InterfazCrucigrama() throws IOException {
        crucigrama = new Crucigrama();
        cargarCrucigrama();
        mostrarBanner();
        mostrarCrucigrama();
        Menu();

    }

    /**
     * Este método permite Leer el archivo, que contiene las preguntas, respuestas y el crucigrama <br>
     * 
     */
    private void cargarCrucigrama() throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("data/crucigrama1.txt"));
        String linea = br.readLine();
        int k = 0;
        int hor = 0;
        int ver = 0;
        int j = 0;
        // preguntas
        if (linea != null) {
            String[] pre = linea.split("-");
            hor = Integer.parseInt(pre[0]);
            ver = Integer.parseInt(pre[1]);
        }
        linea = br.readLine();
        // Preguntas horizontales
        while (linea != null && k < hor) {
            crucigrama.cargarPreguntas('H', linea);
            linea = br.readLine();
            k++;
        }
        k = 0;
        // Preguntas verticales
        while (linea != null && k < ver) {
            crucigrama.cargarPreguntas('V', linea);
            linea = br.readLine();
            k++;
        }
        // respuestas
        String[] res = linea.split("-");
        for (int i = 0; i < res.length; i++) {
            crucigrama.cargarRespuestas(res[i]);
        }
        linea = br.readLine();
        // Crucigrama
        while (linea != null) {
            String[] campos = linea.split("  ");
            for (int i = 0; i < campos.length; i++) {
                String cam = campos[i];
                if (!(cam.length() > 1)) {
                    crucigrama.cargarMatriz(j, i, cam.charAt(0));
                }
            }
            j++;
            linea = br.readLine();
        }
        br.close();
    }

    /**
     * Este método permite mostrar un banner en el Menu. <br>
     */
    public void mostrarBanner() {
        StringBuilder all = new StringBuilder();
        all.append("\n");
        int ancho = 17;
        for (int a = 1; a <= 4; a++) {
            int cantidadAsteriscos = ancho - a;
            int cantidadEspacios = ancho - cantidadAsteriscos;
            int cantidadSlashes = (ancho - a) * 2;
            int cantidadDeBackSlashes = (a - 1) * 2;
            appendChars(all, '*', cantidadAsteriscos);
            appendChars(all, ' ', cantidadEspacios);
            appendChars(all, '/', cantidadSlashes);
            appendChars(all, '\\', cantidadDeBackSlashes);
            appendChars(all, ' ', cantidadEspacios);
            appendChars(all, '*', cantidadAsteriscos);
            all.append("\n");
        }

        all.append("*****************************************************************\n");
        all.append("************************** CRUCIGRAMA ***************************\n");
        all.append("*****************************************************************\n");

        for (int a = 4; a >= 1; a--) {
            int cantidadAsteriscos = ancho - a;
            int cantidadEspacios = ancho - cantidadAsteriscos;
            int cantidadDeBackSlashes = (ancho - a) * 2;
            int cantidadSlashes = (a - 1) * 2;
            appendChars(all, '*', cantidadAsteriscos);
            appendChars(all, ' ', cantidadEspacios);
            appendChars(all, '/', cantidadSlashes);
            appendChars(all, '\\', cantidadDeBackSlashes);
            appendChars(all, ' ', cantidadEspacios);
            appendChars(all, '*', cantidadAsteriscos);
            all.append("\n");
        }
        all.append("\n");
        System.out.println(all.toString());
    }

    /**
     * Este método permite concatenar los caracteres para el banner. <br>
     */
    static void appendChars(StringBuilder sb, char c, int count) {
        for (int i = 0; i < count; i++) {
            sb.append(c);
        }
    }

    /**
     * Este método permite mostrar las preguntas y el crucigrama por Consola. <br>
     */
    public void mostrarCrucigrama(){

        System.out.println("--------------PREGUNTAS--------------");
        System.out.println("VERTICALES");
            for(int indice = 0; indice < crucigrama.darPreguntasH().size(); indice++){
                System.out.println(crucigrama.darPreguntasH().get(indice));
            }

        System.out.println("----------------------------------------");
        System.out.println("HORIZONTALES");
            for(int indice = 0; indice < crucigrama.darPreguntasV().size(); indice++){
                System.out.println(crucigrama.darPreguntasV().get(indice));
            }

            System.out.println("----------------------------------------");
        System.out.println("RESPUESTAS");
            for(int indice = 0; indice < crucigrama.darRespuestas().size(); indice++){
                System.out.println(crucigrama.darRespuestas().get(indice).darLetras());
            }

        System.out.println("\n");

        for(int i = 0; i < 10; i++){

            for(int j = 0; j < 23; j++){
                System.out.print(crucigrama.darCaracteres()[i][j].darCaracter());

                if (j == 22){
                    System.out.print("\n");
                }
            }
        }


    }

    /**
     * Este método permite mostrar El menú al usuario. <br>
     */
    //BASICALLY THIS IS WHERE THE CODE DOESN'T WORK AS IT SHOULD
    public void Menu() {
        Scanner lector = new Scanner(System.in);
        int pregunta = 0;
        String respuesta = "";
        int tipo = 0;
        int continuar = 1;

        while (!crucigrama.estaTerminado() && continuar == 1) {
            System.out.format("+------------------------------+%n%n");
            System.out.println("************  MENU  ***************");
            System.out.println("Por favor digite el número de la pregunta ");
            pregunta = lector.nextInt();
            System.out.println("Digite 1 si es horizontal o 2 si es vertical");
            tipo = lector.nextInt();
            System.out.println("Digite la respuesta");
            respuesta = lector.next();

            String resultado = crucigrama.buscarRespuesta( tipo, pregunta, respuesta.toUpperCase());
            System.out.println("Su respuesta es " + resultado);
            if (resultado.equals("Correcta"))
                crucigrama.actualizarCrucigrama(pregunta, respuesta, tipo);
            mostrarCrucigrama();
            System.out.println("Desea continuar? 1.SI 2.NO");
            continuar = lector.nextInt();
        }
        System.out.println("Gracias por jugar!");
        System.exit(0);
    }

    /**
     * Este método permite mostrar las preguntas en formato tabla. <br>
     */
    private void agregarPreguntas() {

        String formato = "|%-80s| %-80s | %n";
        String formato2 = "%-60s %-10s  %-60s  %n";
        String hor = "";
        String ver = "";
        String l = "----------------------------------------------------------------------------";
        System.out.format(formato2, l, "PREGUNTAS", l);
        System.out.format(
                "+---------------------+--------------------------------+------------------------------+------------------------+--------------------+-------+---------------+-------+%n");
        System.out.format(formato, "Horizontales", "Verticales");
        System.out.format(
                "+---------------------+--------------------------------+------------------------------+------------------------+--------------------+-------+---------------+-------+%n");

        for (int i = 0; i < crucigrama.darPreguntasH().size() || i < crucigrama.darPreguntasV().size(); i++) {
            if (i < crucigrama.darPreguntasH().size())
                hor = crucigrama.darPreguntasH().get(i);
            else
                hor = " ";
            if (i < crucigrama.darPreguntasV().size())
                ver = crucigrama.darPreguntasV().get(i);
            else
                ver = " ";
            System.out.format(formato, hor, ver);
        }
        System.out.format(
                "+---------------------+--------------------------------+------------------------------+------------------------+--------------------+-------+---------------+-------+%n%n%n");
    }

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        InterfazCrucigrama wordCross = new InterfazCrucigrama();

    }

}

这是最后一个。界面。

因此,当您初始化填字游戏时,您可以选择一个问题,然后您必须说明它是纵向还是横向。然后你把你的答案,如果它是正确的,它应该给你一个说正确的消息,并刷新填字游戏中的单词(虽然没有那么远)。但是当你提出答案时,即使答案是正确的,它也不会做任何事情。我知道代码中存在很多缺陷,这实在令人沮丧。但到目前为止,只是试图让代码比较答案并返回消息。

0 个答案:

没有答案