Мой графический интерфейс не распознает мой метод экземпляра.Как я могу это исправить? - PullRequest
0 голосов
/ 28 декабря 2018

1) Я не могу вызвать свой метод экземпляра в графическом интерфейсе

2) Я не могу реализовать определенную функцию.

У меня есть две основные проблемы.Прежде всего мне нужен мой графический интерфейс для распознавания моего экземпляра метода (а именно, когда я вызываю мой метод isWin в моем графическом интерфейсе, метод не распознается, «символ не может быть найден»).

Моя другая проблема заключается в выполнении определенной функции.Если мой боец ​​- WaterFighter, тогда он сможет побить FireFighter на три уровня выше.поэтому водный боец ​​8-го уровня должен победить пожарного 10-го уровня.Я понятия не имею, как реализовать эту функцию.

Я попытался указать в методе isWin, что любой передаваемый символ противоположности должен упасть на три уровня, если водный истребитель вызывает метод, и если боец, вызывающий isWin, является FireFighter, то боец, вызвавший его, должен сбросить3 уровень, чтобы дать преимущество противнику.Но это явно не работает, потому что, если я получу стихи пожарного другого пожарного?Тогда один из бойцов имеет несправедливое преимущество.

// мой интерфейс

   package OOPFight;

import java.util.ArrayList;

public interface Character {

    public boolean isWin(Character c);

    public String getName();

    public int getLevel();

    public String toString();

}

// мой боец ​​суперкласса

package OOPFight;

import java.util.ArrayList;

/**
 *
 * @author Owner
 */
public class fighter implements Character {



    public String name;
    public int level;
    public String type;

    public fighter(String n, int l, String t) {

        name = n;
        level = l;
        type = t;

    }

    public boolean isWin(Character c) {

        if (level > c.getLevel()) {

            return true;
        } else if (c.getLevel() > level) {

            return false;
        } else {

            int random = (int) (Math.random() * 2 + 1);

            if (random == 1) {
                return true;
            } else {

                return false;
            }
        }

    }//end iswin

    public String toString() {

        String desc;
        desc = name + ":" + level + ":" + type;
        return desc;

    }//end toString()

    public String getType() {

        return type;

    }//end toString()

    public String getName() {
        return name;
    }

    public int getLevel() {
        return level;
    }

}

// мой подкласс WaterFighter

import java.util.ArrayList;


public class WaterFighter extends fighter{


    public String name;
    public int level;
    public String type;




    public WaterFighter(String n, int l, String t) {
        super(n, l, t);
    }

    public  boolean isWin(Character c){


        int level2 = c.getLevel() - 3;

        int level1 = level;

        if (level1 > level2){

            return true;

        } else if (level2 > level1){

            return false;
        } else {

              int random = (int) (Math.random() * 2 + 1);

            if (random == 1) {
                return true;
            } else {

                return false;
            }//end if

        }//end if 

    }//end isWin

}//end class

// мой подкласс FireFighter

package OOPFight;

import java.util.ArrayList;


public class FireFighter extends fighter{


    public String name;
    public int level;
    public String type;




    public FireFighter(String n, int l, String t) {
        super(n, l, t);
    }

    public  boolean isWin(Character c){



        int level2 = c.getLevel();

        int level1 = level - 3;

        if (level1 > level2){

            return true;

        } else if (level2 > level1){

            return false;
        } else {

              int random = (int) (Math.random() * 2 + 1);

            if (random == 1) {
                return true;
            } else {

                return false;
            }//end if

        }//end if 

    }//end isWin

}//end class

// мой графический интерфейс

package OOPFight;

import java.util.ArrayList;

/**
 *
 * @author Owner
 */
public class fight extends javax.swing.JFrame {

   public static ArrayList allFighters = new ArrayList();


    /**
     * Creates new form fight
     */
    public fight() {
        initComponents();


        ArrayList allFighterTypes = new ArrayList();

        allFighterTypes.add("Water Fighter");
        allFighterTypes.add("Fire Fighter");

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

        typesComboBox.addItem((String) allFighterTypes.get(i)); 

        }

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        nameField = new javax.swing.JTextField();
        createFighter = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        typesComboBox = new javax.swing.JComboBox<>();
        jLabel5 = new javax.swing.JLabel();
        levelField = new javax.swing.JTextField();
        jPanel2 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        firstCombo = new javax.swing.JComboBox<>();
        jLabel6 = new javax.swing.JLabel();
        secondCombo = new javax.swing.JComboBox<>();
        jButton2 = new javax.swing.JButton();
        display = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBackground(new java.awt.Color(255, 255, 0));

        jLabel1.setFont(new java.awt.Font("Gadugi", 0, 24)); // NOI18N
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Fighter Regristration");

        jLabel3.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel3.setText("Name:");

        createFighter.setText("Create Fighter!");
        createFighter.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                createFighterActionPerformed(evt);
            }
        });

        jLabel4.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel4.setText("Type:");

        jLabel5.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel5.setText("Level:");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 357, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGroup(jPanel1Layout.createSequentialGroup()
                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel3)
                                .addComponent(jLabel4)
                                .addComponent(jLabel5))
                            .addGap(18, 18, 18)
                            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(nameField)
                                .addComponent(typesComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(levelField))))
                    .addComponent(createFighter))
                .addContainerGap(33, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(43, 43, 43)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(nameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(47, 47, 47)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(typesComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(37, 37, 37)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel5)
                    .addComponent(levelField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(57, 57, 57)
                .addComponent(createFighter)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanel2.setBackground(new java.awt.Color(0, 255, 255));

        jLabel2.setFont(new java.awt.Font("Gadugi", 0, 24)); // NOI18N
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("Fighting Arena");

        jLabel6.setText("VS.");

        jButton2.setText("Fight!");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        display.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
        display.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jButton2)
                .addGap(170, 170, 170))
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(display, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(firstCombo, 0, 184, Short.MAX_VALUE)
                        .addGap(33, 33, 33)
                        .addComponent(jLabel6)
                        .addGap(18, 18, 18)
                        .addComponent(secondCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(116, 116, 116)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(firstCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel6)
                    .addComponent(secondCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(108, 108, 108)
                .addComponent(jButton2)
                .addGap(67, 67, 67)
                .addComponent(display, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(113, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    private void createFighterActionPerformed(java.awt.event.ActionEvent evt) {                                              

        String n = nameField.getText();
        String leveler = levelField.getText();
        int level = Integer.parseInt(leveler);
        int typer = typesComboBox.getSelectedIndex();
        String type = null;

        if (typer == 1){

            type =  "WaterFighter";

        } else if (typer == 2){
            type = "FireFighter";

        }


         allFighters.add( new fighter(n, level, type));

         firstCombo.addItem(allFighters.toString());
         secondCombo.addItem(allFighters.toString());


    }                                             

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        int monster1 = firstCombo.getSelectedIndex();
        int monster2 = secondCombo.getSelectedIndex();

        boolean win = allFighters.get(monster1).isWin(allFighters.get(monster2));



    }                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(fight.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(fight.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(fight.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(fight.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new fight().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton createFighter;
    private javax.swing.JLabel display;
    private javax.swing.JComboBox<String> firstCombo;
    private javax.swing.JButton jButton2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JTextField levelField;
    private javax.swing.JTextField nameField;
    private javax.swing.JComboBox<String> secondCombo;
    private javax.swing.JComboBox<String> typesComboBox;
    // End of variables declaration                   



}

// код конца

Я ожидаю, что смогу правильновызовите мой метод isWin в моем классе GUI, и я смогу правильно реализовать эту функцию, когда есть разные возможности, когда WaterFighter может побить FireFighter на 3 уровня выше.Таким образом, водный боец ​​8-го уровня может победить пожарного 10-го уровня.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Чтобы помочь с вашим боевым механизмом, первое, что вы должны сделать, это создать правильные классы при запуске бойца.Может быть, реализовать что-то подобное в createFighterActionPerformed:

int typer = typesComboBox.getSelectedIndex();
fighter f;

if (typer == 0) {
    f = new fighter(n, level, "Regular fighter");
} else if (typer == 1) {
    f = new WaterFighter(n, level, "WaterFighter");
} else if (typer == 2) {
    f = new FireFighter(n, level, "FireFighter");
}

allFighters.add(f);

Чтобы сделать сравнение этого бойца реальностью, вы можете использовать экземпляр условия в каждом классе бойцов isWin для проверки конкретного противника.Например:

if (c instanceof FireFighter) {
    // Do special stuff
}

Я бы также посоветовал вам пересмотреть наименование интерфейса как Character, так как его легко перепутать с классом java.lang.Character.

0 голосов
/ 28 декабря 2018

Итак, после долгих копаний проблема сводится к этой строке ...

boolean win = allFighters.get(monster1).isWin(allFighters.get(monster2));

Это приводит к ошибке

fight.java:117: error: cannot find symbol
        boolean win = allFighters.get(monster1).isWin(allFighters.get(monster2));

Проблема с этим может быть прослежена докак вы объявляете allFighters ...

public static ArrayList allFighters = new ArrayList();

По умолчанию ArrayList может управлять любым типом Object, поэтому, когда вы вызываете get, он возвращает экземпляр Object, который, очевидно, не имеет метода isWin.

Вы можете разыграть результат get, но более простое решение - воспользоваться встроенной универсальной поддержкой Java.

Теперь,поскольку все типы ваших бойцов происходят от Character, вы можете просто ограничить allFighters ArrayList до Character, что-то вроде ...

public static ArrayList<Character> allFighters = new ArrayList<>();

Это накладывает ограничение на время компиляции, которое гарантирует, чтоallFighters содержит только экземпляры Character

Для получения более подробной информации ознакомьтесь с Generics .

Вы также должны ознакомиться с языком JavaСоглашения о кодировании .Людям будет проще читать ваш код, а другим -

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...