2013-12-09 98 views
0

我试图让两只宠物有两种不同的情绪状态。但是当我运行它时,它们共享相同的状态,如下所示:使用数组产生两个随机值

Oh cool, asda is a very unique name! 
asda is DANGEROUS RIGHT NOW!!!. 
Oh cool, polo is a very unique name! 
polo is DANGEROUS RIGHT NOW!!!. 

asda's irrtability level is 4 
asda's thirst level is 8 
asda's hunger level is 5 

polo's irrtability level is 4 
polo's thirst level is 8 
polo's hunger level is 5 

我已经将情绪状态值存储在数组中。

我试过使用for循环,以便每个宠物会有不同的值,但我不知道如果我做得正确。

所以我应该为情绪状态创建两个不同的数组,还是有更好的做事方式?

这里是整个代码。

import javax.swing.*; 
import java.util.Random; 
public class alientpetprogram 
{ 

public static void main(String[] args) 
{ 

    int[] EmotionalState = new int [3]; 
    Random emotion = new Random(); 
    for(int i = 0; i <= 2; i++) 
    { 
    int hungerLVL = emotion.nextInt(10) + 1; 
    EmotionalState[0] = hungerLVL; 

    int thirstLVL = emotion.nextInt(10) + 1; 
    EmotionalState[1] = thirstLVL; 

    int irritabilityLVL = emotion.nextInt(10) + 1; 
    EmotionalState[2] = irritabilityLVL; 
    } 

    String [] petName = new String [2]; 
    petEmotion(EmotionalState, petName); 

    System.exit(0); 
} //ENDS main 

    public static String[] petInteraction(int[] EmotionalState, String [] petName) //Use this further on in petEmotion() 
    { 
     for(int i = 0; i < 2; i++) 
     { 
      petName[i] = JOptionPane.showInputDialog("What is your pet called?"); 
      System.out.println("Oh cool, " + petName[i] + " is a very unique name!"); 


      if (EmotionalState[0] == 1 || EmotionalState[0] == 2 || EmotionalState[0] == 3) 
      { 
       System.out.println(petName[i] + " is feeling Calm."); 
      } 
      else if (EmotionalState[0] == 4 || EmotionalState[0] == 5 || EmotionalState[0] == 6) 
      { 
       System.out.println(petName[i] + " is feeling tetchy!"); 
      } 
      else if (EmotionalState[0] == 7 || EmotionalState[0] == 8 || EmotionalState[0] == 9 || EmotionalState[0] == 10) 
      { 
       System.out.println(petName[i] + " is DANGEROUS RIGHT NOW!!!."); 
      } 

     } 
     return petName; 
    } //ENDS petInteraction 

       public static void petEmotion(int[] EmotionalState, String [] petName) //This method changes the emotional states of the pet. 
       { 
         String[] petsName = petInteraction(EmotionalState, petName); 

         String userinput; 
         userinput=JOptionPane.showInputDialog("choose how many rounds?"); 
         int roundsuggestion=Integer.parseInt(userinput); 



         for (int round =1; round <=roundsuggestion; round++) //sets the amount of rounds the game runs for.   
         { 
         System.out.println("Round " + roundsuggestion);     
         System.out.println(petsName[0] + "'s irrtability level is " + EmotionalState[2]); 
         System.out.println(petsName[0] + "'s thirst level is " + EmotionalState[1]); 
         System.out.println(petsName[0] + "'s hunger level is " + EmotionalState[0]); 
         System.out.println(petsName[1] + "'s irrtability level is " + EmotionalState[2]); 
         System.out.println(petsName[1] + "'s thirst level is " + EmotionalState[1]); 
         System.out.println(petsName[1] + "'s hunger level is " + EmotionalState[0]); 


         for(int y=1; y<=2; y++) 
         { 
          String askToReduceIrritable = JOptionPane.showInputDialog("Would you like to sing for " + petsName[0] + " in order to lower the pets irritability level?"); 

          if (askToReduceIrritable.equalsIgnoreCase("Yes")) 
          { 
           EmotionalState[2] = EmotionalState[2] - 1; 
           System.out.println(petsName[0] + "'s irrtability level is now " + EmotionalState[2]);       
          } 

          String askToReduceThirst = JOptionPane.showInputDialog("Would you like to give " + petsName[0] + " some water in order to reduce the thirst level?"); 

          if (askToReduceThirst.equalsIgnoreCase("Yes")) 
          { 
           EmotionalState[1] = EmotionalState[1] - 1; 
           System.out.println(petsName[0] + "'s thirst level is now " + EmotionalState[1]);       
          } 

          String askToReduceHunger = JOptionPane.showInputDialog("Would you like to give " + petsName[0] + " some food in order to reduce the hunger level?"); 

          if (askToReduceHunger.equalsIgnoreCase("Yes")) 
          { 
           EmotionalState[0] = EmotionalState[0] - 1; 
           System.out.println(petsName[0] + "'s hunger level is now " + EmotionalState[0]);       
          }   
          System.out.println(""); 
          System.out.println("You will now take care of the second pet"); 

          String askToReduceIrritableTwo = JOptionPane.showInputDialog("Would you like to sing for " + petsName[1] + " in order to lower the pets irritability level?"); 

          if (askToReduceIrritableTwo.equalsIgnoreCase("Yes")) 
          { 
           EmotionalState[2] = EmotionalState[2] - 1; 
           System.out.println(petsName[1] + "'s irrtability level is now " + EmotionalState[2]);       
          } 

          String askToReduceThirstTwo = JOptionPane.showInputDialog("Would you like to give " + petsName[1] + " some water in order to reduce the thirst level?"); 

          if (askToReduceThirstTwo.equalsIgnoreCase("Yes")) 
          { 
           EmotionalState[1] = EmotionalState[1] - 1; 
           System.out.println(petsName[1] + "'s thirst level is now " + EmotionalState[1]);       
          } 

          String askToReduceHungerTwo = JOptionPane.showInputDialog("Would you like to give " + petsName[1] + " some food in order to reduce the hunger level?"); 

          if (askToReduceHungerTwo.equalsIgnoreCase("Yes")) 
          { 
           EmotionalState[0] = EmotionalState[0] - 1; 
           System.out.println(petsName[1] + "'s hunger level is now " + EmotionalState[0]);       
          }   
          String exitGame = JOptionPane.showInputDialog("Would you like to exit the game? Type yes/no"); 

          if (exitGame.equalsIgnoreCase("Yes")) 
          { 
           System.exit(0);      
          } 
          else 
          System.out.println(""); 
          JOptionPane.showMessageDialog(null, "A new round has begun!"); 
         } // END second loop 
      } // END first loop 
       }//ENDS petEmotion     

} //ENDS Class alientpetprogram 
+0

我强烈建议您学习面向这种涉及状态的项目类型的面向对象编程FAST。你可以简单地为一个宠物对象创建一个基础构造器,并且初始的“状态”如'hungerLVL','thirstLVL','irritiabilityLVL'等等。你的构造函数允许你随意改变这些值。 ''新宠物(5,6,10)'分别为'LVL's。您的方法可以检索或更改这些状态​​。不要为此做程序,因为它会使编程变得困难,并且使得将来的维护令人难以置信地变得烦人。 – theGreenCabbage

回答

1

这是因为您正在使用EmotionalState数组中的相同值。在您的方法petInteraction()中,您正在使用的EmotionalState索引始终为0。它没有改变。因此,在for循环中获取的所有宠物将根据存储在数组的第0个索引中的任何整数结束感情。您需要使用不同的索引来从数组中获取不同的值。此外,根据你的代码,你使用的指数应该有3的差异,让他们在任何时候都有两种不同的情绪。

编辑

在你的方法,你有一个for循环,其循环2个times.Each时间为一个新的宠物。现在获得宠物的名字后,你有一个if-else结构。不要说你的EmotionalState数组在第0个索引中保持值10。对于第一只宠物来说,它会进入第三只宠物。它会打印出它很危险。在for循环的第二次运行中,宠物名称会更改,但第0个索引中的值仍然为10.因此,它会再次打印出现在是危险的。前两个if块永远不会进入,因为第0个索引中的值始终为10,并且在程序中永远不会更改。那是什么导致它打印出同样的情绪状态。你可以做的是,你可以在for循环的每次运行中生成一个随机数并更新EmotionalState数组的第0个索引,这两个数字应该有至少3的差值,这样每次运行它都会进入一个不同的if块。

+0

我已经使用情绪状态[0],因为它拥有饥饿感。取决于关卡,我想打印相应的信息。我无法想到另一种方式。 我不明白你的意思是有什么区别3. – AbbenGabben

+0

@AlexiaBatyn我已经在我的答案的编辑部分解释它。 – Adarsh

+0

对不起,我误解了评论。我编辑了我的答案。 – Adarsh