【问题标题】:Trying to give my program Manners (JAVA Beginner)试图给我的程序礼仪(JAVA初学者)
【发布时间】:2016-11-07 03:51:25
【问题描述】:

这周才开始学习代码,所以我可能只是太超前了,但任何帮助都会很棒!

我一直在努力尝试赋予我的程序两种不同的个性特征:正式和非正式。

我尝试通过使用布尔值“MANNERS”来确定此后的每个引用(包括名称选择),因为可以根据这个布尔值检查函数。

每次 myName 是引用时,我希望它随机选择;一个正式名称参考或一个非正式名称参考,取决于它设置的“礼仪”是什么。

这工作,但一旦我把它们放在一起,它似乎就停止工作了------->

公共类名选择{

//A list of formal things to call me
public static String formName(){
    ArrayList<String> formNames = new ArrayList<String>();
    formNames.add("Master");
    formNames.add("Sir");
    formNames.add("Mr Smith");

    Random formalNs = new Random();
    formalNs.nextInt(3);

 return formNames.get(formalNs.nextInt(3));

}
//A list of informal things to call me
public static String nickName(){

    ArrayList<String> nickNames = new ArrayList<String>();
    nickNames.add("Ol' Fella");
    nickNames.add("Buddy");
    nickNames.add("Dude");
    nickNames.add("Mate");
    nickNames.add("John");

    Random nickNs = new Random(); 
    nickNs.nextInt(5);

    return nickNames.get(nickNs.nextInt(4));
}

public static void main(String[] args){

    //keeps saying "value of manners is not used"??could this be the problem??
    boolean manners;
    //as default, it choices a formal name
     String myName;

// 询问我是否要正式(有“礼貌”)

        System.out.println("Do you want me to be formal?");
        Scanner formal = new Scanner(System.in);
        String formalInput = formal.next();

        //If formal, turn manners ON
        if (formalInput.equals("yes")||formalInput.equals("yep")){

            manners = true;
        }
        //If informal, turn manners OFF
        else {manners = false;};

        //If manners are ON, choose random name from formName()
        if (manners = true){
            myName = formName();
        }
        //Else choose from nickName()
        else{myName = nickName();};




    System.out.println("Hello " + myName + ", how are you?");

    Scanner feeling = new Scanner(System.in);
    String feelingInput = feeling.next();

    if (feelingInput.equals("dunno")){
        System.out.println("Huh..");
    }

    else{
    System.out.println("Interesting...how much sleep have you had " + myName + "?");
    System.out.println(myName);
    System.out.println(myName);

    }


}
}

如果它第一次说“Dude”,它总是说“Dude”。 如果它第一次说“先生”,它总是说“先生”。 (不是我想要的,我每次都尝试从同一个数组中选择不同的名称)

我猜我需要在某处放置某种循环,以使其不断随机选择名称,但我不知道在哪里。我愿意知道。 TY

【问题讨论】:

    标签: java variables reference boolean


    【解决方案1】:

    您使用==,而不是= 来检查条件。所以每次您经过if (manners = true) 时,您的礼仪布尔值都会被设置为TRUE。

    【讨论】:

      【解决方案2】:

      1) 将ArrayList&lt;String&gt; 设为全局并为空。

      if (manners == true)  myName = formName();
      else {myName = nickName();};
      

      是您要添加到列表的位置。 myName 只是一个String,你想要一个ArrayList&lt;String&gt;

      2) 创建如下所示的 randInt 方法。

      public static int randInt(int min, int max) {
          Random rand = new Random();
          int randomNum = rand.nextInt((max - min) + 1) + min;
          return randomNum;
      }
      

      3) 进行以下更改。

      public static `ArrayList<String>` formName(){
          ArrayList<String> formNames = new ArrayList<String>();
          formNames.add("Master");
          formNames.add("Sir");
          formNames.add("Mr Smith");
          return formNames;
      }
      

      创建列表变量并初始化为null。

      ArrayList<String> myName = null;
      

      然后您将按以下方式分配列表。

      myName = formName();
      

      这样你总是会从列表中随机选择一个名字。

      System.out.println("Hello " + myName.get(randInt(0, (myName.length - 1)) + ", how are you?");
      

      还有

      if (manners = true){
        myName = formName();
      }
      

      要检查布尔条件,它是 ==NOT =。您在上面所做的是将礼仪的价值设置为真实,使其始终真实。

      编辑:示例工作代码

      import java.util.ArrayList;
      import java.util.Random;
      import java.util.Scanner;
      
      public class nameChoice
      {
          public static ArrayList<String> formName()
          {
              ArrayList<String> formNames = new ArrayList<String>();
              formNames.add("Master");
              formNames.add("Sir");
              formNames.add("Mr Smith");
              return formNames;
          }
      
          public static ArrayList<String> nickName()
          {
              ArrayList<String> nickNames = new ArrayList<String>();
              nickNames.add("Ol' Fella");
              nickNames.add("Buddy");
              nickNames.add("Dude");
              nickNames.add("Mate");
              nickNames.add("John");
              return nickNames;
          }
      
          public static int randInt(int min, int max) {
              Random rand = new Random();
              int randomNum = rand.nextInt((max - min) + 1) + min;
              return randomNum;
          }
      
          public static void main(String[] args)
          {
              boolean manners;
              ArrayList<String> myName;
      
              System.out.println("Do you want me to be formal?");
              Scanner formal = new Scanner(System.in);
              String formalInput = formal.next();
      
              if (formalInput.equals("yes") || formalInput.equals("yep"))
              {
                  manners = true;
              }
              else
              {
                  manners = false;
              }
      
              if (manners == true)
              {
                  myName = formName();
              }
              else
              {
                  myName = nickName();
              }
      
              System.out.println("Hello " + myName.get((randInt(0, (myName.size() - 1)))) + ", how are you?");
          }
      }
      

      【讨论】:

      • @DJmendy 我不确定你的意思,我粘贴了上面的工作代码,你可以复制/粘贴并尝试。请注意,我不小心说length 在这种情况下应该是size()。如果此答案对您有所帮助并回答了您的问题,您能否将其标记为答案?我想得到一些积分,以便我可以帮助更多的人,我是新手,除非我发布答案,否则我什至无法评论哈哈
      • 是的,谢谢 :) 我删除了我的评论,因为它甚至让我感到困惑。是的,它不适用于.length,所以在快速谷歌之后我将它切换到.size()。我想那是因为它是一个数组。感谢您的帮助!
      猜你喜欢
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 2023-01-02
      • 2012-04-14
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      相关资源
      最近更新 更多