2016-12-29 1 views
-2

В настоящее время я работаю над проектом, в котором генерируются 2 случайных числа от 0 до 20. Также выбирается случайный оператор (+, - или *).Измените значение переменной класса и затем вызовите его в другом классе

Пользователь должен ввести правильный ответ тремя попытками. Если они получают его с первой попытки, они получают 5 очков, вторую попытку, 3 балла и третью попытку, 1 очко. Если после 3 попыток они все равно не получат правильный ответ, они получают 0 очков, и генерируется новый набор чисел и оператор.

Вот мой вопрос: Когда я запускаю тестер и введите свой ответ, число попыток успешно увеличивает до 1, но количество точек остается на 0. Я сделал некоторые устранения неполадок и обнаружил, что значение пт < - (количество точек у пользователя) остается на 0 (его инициализируется значение), так как значение ответа остается на 0, даже если заявление переключателя в Randomize() метода изменяет значение ответ.

Вот код для моего проекта:

первого класса (Adder.java):

package adder; 

import java.util.Random; 

    public class Adder 
    { 
     int int1 = 0; 
     int int2 = 0; 
     int answer = 0; 
     String operator; 

     public int randomize() 
     { 
      Random rnd1 = new Random(); 

      int1 = rnd1.nextInt(21); 
      int2 = rnd1.nextInt(21); 
      int op = rnd1.nextInt(3); 

      switch(op) 
      { 
       case 0: 
        operator = "+"; 
        answer = int1 + int2; 
        break; 

       case 1: 
        operator = "-"; 
        answer = int1 - int2; 
        break; 

       case 2: 
        operator = "*"; 
        answer = int1 * int2; 
        break; 
      } 

      //Test 
      System.out.println(int1); 
      System.out.println(int2); 
      System.out.println(operator); 
      System.out.println(answer); 

      return answer; 
     } 

    public static void main(String[] args) 
    { 
     //Test 
     //Adder a = new Adder(); 
     //a.randomize(); 
    } 
} 

второго класса (AdderGame.java):

package adder; 

public class AdderGame 
{ 
    //1 try = 5 pt, 2 try = 3 pt, 3 try = 1 pt 

    int numTries = 0; 
    //Number of points the user has, init to 0 
    int pt = 0; 
    Adder checker = new Adder(); 

    public int checkAnswer(int a) 
    { 
     System.out.println("CHECKER.ANSWER = " + checker.answer); 

     if (a == checker.answer) 
     { 
      numTries++; 

      switch(numTries) 
      { 
       case 1: 
        pt = pt + 5; 
        break; 

       case 2: 
        pt = pt + 3; 
        break; 

       case 3: 
        pt++; 
        break; 
      } 
     } 

     else if (a != checker.answer) 
     { 
      //Another test output, to see if this loop is entered or not 
      System.out.println("INCORRECT"); 
     } 

     return pt; 
    } 
} 

третий класс (AdderTester.java) (GUI):

package adder; 

public class AdderTester extends javax.swing.JFrame 
{ 
    //Create objects from the other two classes 
    Adder adder = new Adder(); 
    AdderGame checker = new AdderGame(); 

    public AdderTester() { 
     initComponents(); 
     adder.randomize(); 
     num1Label.setText(Integer.toString(adder.int1)); 
     num2Label.setText(Integer.toString(adder.int2)); 
     opLabel.setText(adder.operator); 
    } 

    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 
     jPanel1 = new javax.swing.JPanel(); 
     jLabel1 = new javax.swing.JLabel(); 
     num1Label = new javax.swing.JLabel(); 
     opLabel = new javax.swing.JLabel(); 
     num2Label = new javax.swing.JLabel(); 
     answerTextfield = new javax.swing.JTextField(); 
     confirmButton = new javax.swing.JButton(); 
     jLabel2 = new javax.swing.JLabel(); 
     ptLabel = new javax.swing.JLabel(); 
     jLabel3 = new javax.swing.JLabel(); 
     numTriesLabel = new javax.swing.JLabel(); 
     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 

     jPanel1.setBackground(new java.awt.Color(54, 69, 79)); 
     jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); 

     jLabel1.setFont(new java.awt.Font("Dialog", 1, 36)); // NOI18N 
     jLabel1.setForeground(new java.awt.Color(255, 255, 255)); 
     jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel1.setText("Adder"); 
     jPanel1.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 10, 450, -1)); 

     num1Label.setFont(new java.awt.Font("Dialog", 0, 16)); // NOI18N 
     num1Label.setForeground(new java.awt.Color(255, 255, 255)); 
     num1Label.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     num1Label.setText("num1"); 
     jPanel1.add(num1Label, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 100, -1, -1)); 

     opLabel.setFont(new java.awt.Font("Dialog", 0, 16)); // NOI18N 
     opLabel.setForeground(new java.awt.Color(255, 255, 255)); 
     opLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     opLabel.setText("op"); 
     jPanel1.add(opLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(200, 100, 40, -1)); 

     num2Label.setFont(new java.awt.Font("Dialog", 0, 16)); // NOI18N 
     num2Label.setForeground(new java.awt.Color(255, 255, 255)); 
     num2Label.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     num2Label.setText("num2"); 
     jPanel1.add(num2Label, new org.netbeans.lib.awtextra.AbsoluteConstraints(290, 100, -1, -1)); 

     answerTextfield.setFont(new java.awt.Font("Dialog", 0, 14)); // NOI18N 
     jPanel1.add(answerTextfield, new org.netbeans.lib.awtextra.AbsoluteConstraints(90, 140, 260, -1)); 

     confirmButton.setFont(new java.awt.Font("Dialog", 0, 16)); // NOI18N 
     confirmButton.setText("Confirm"); 
     confirmButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       confirmButtonActionPerformed(evt); 
      } 
     }); 
     jPanel1.add(confirmButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(180, 310, -1, -1)); 

     jLabel2.setBackground(new java.awt.Color(255, 255, 255)); 
     jLabel2.setFont(new java.awt.Font("Dialog", 0, 16)); // NOI18N 
     jLabel2.setForeground(new java.awt.Color(255, 255, 255)); 
     jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel2.setText("Current Points:"); 
     jPanel1.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 180, -1, -1)); 

     ptLabel.setBackground(new java.awt.Color(255, 255, 255)); 
     ptLabel.setFont(new java.awt.Font("Dialog", 0, 14)); // NOI18N 
     ptLabel.setForeground(new java.awt.Color(255, 255, 255)); 
     ptLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     ptLabel.setText("pt"); 
     jPanel1.add(ptLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(190, 210, 60, -1)); 

     jLabel3.setBackground(new java.awt.Color(255, 255, 255)); 
     jLabel3.setFont(new java.awt.Font("Dialog", 0, 16)); // NOI18N 
     jLabel3.setForeground(new java.awt.Color(255, 255, 255)); 
     jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel3.setText("Number of Tries:"); 
     jPanel1.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(140, 240, 170, -1)); 

     numTriesLabel.setBackground(new java.awt.Color(255, 255, 255)); 
     numTriesLabel.setFont(new java.awt.Font("Dialog", 0, 16)); // NOI18N 
     numTriesLabel.setForeground(new java.awt.Color(255, 255, 255)); 
     numTriesLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     numTriesLabel.setText("numTries"); 
     jPanel1.add(numTriesLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 270, 110, -1)); 

     getContentPane().add(jPanel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 450, 350)); 

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

    private void confirmButtonActionPerformed(java.awt.event.ActionEvent evt) {            
     //Holds the value for the answer the user inputs 
     int userAns = Integer.valueOf(answerTextfield.getText()); 
     //Holds the value for the answer 

     System.out.println("answer = "); 
     checker.checkAnswer(userAns); 

     ptLabel.setText(String.valueOf(checker.pt)); 
     numTriesLabel.setText(String.valueOf(checker.numTries)); 
    }            

    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(AdderTester.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(AdderTester.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(AdderTester.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(AdderTester.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 AdderTester().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JTextField answerTextfield; 
    private javax.swing.JButton confirmButton; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel2; 
    private javax.swing.JLabel jLabel3; 
    private javax.swing.JPanel jPanel1; 
    private javax.swing.JLabel num1Label; 
    private javax.swing.JLabel num2Label; 
    private javax.swing.JLabel numTriesLabel; 
    private javax.swing.JLabel opLabel; 
    private javax.swing.JLabel ptLabel; 
    // End of variables declaration     
} 

ответ

0

Ваша проблема в том, что вы объявили еще Adder в AdderTester. Вы позвонили randomize по номеру этот сумматор. Но когда вы проверяете ответ, вы проверяете , что checker. (тот, который содержится в AdderGame). Вот как это исправить.

Во-первых, добавить метод getAdder в AdderGame:

public Adder getAdder() { 
    return checker; 
} 

Затем измените конструктор AdderTester к этому:

public AdderTester() { 
    initComponents(); 
    checker.getAdder().randomize(); 
    num1Label.setText(Integer.toString(checker.getAdder().int1)); 
    num2Label.setText(Integer.toString(checker.getAdder().int2)); 
    opLabel.setText(checker.getAdder().operator); 
} 

И удалить эту строку в AdderTester:

Adder adder = new Adder(); 
0

Вы создаете два экземпляра Adder, один в AdderGame и другие в AdderTester. Поскольку они являются разными объектами, ваше сравнение терпит неудачу в checkAnswer(). Вместо того, чтобы создавать новый объект из Adder в AdderGame, получите его как параметр конструктора AdderGame.

+0

Спасибо, я попробую удалить один экземпляр Add er, и вернитесь к вам с результатами. – Nish

+0

Я попытался изменить имя объекта AdderGame на checker2. Это все еще не сработало. Мне не нужен объект для каждого класса для правильного доступа к методам в классах? – Nish

+0

Вы можете передать объект и использовать его. общедоступная AdderGame (сумматор сумматора) { this.checker = сумматор; } – ravthiru

Смежные вопросы