2016-11-07 55 views
0

本周只开始学习代码,所以我可能只是在我自己的前面太远,但任何帮助将是惊人的!试图给我的程序礼貌(JAVA初学者)

我一直在努力尝试给我的计划两种不同的人格特质:正式和非正式。

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

每次myName是引用时,我都希望它随机选择;或者是一个formalNameRef或一个informalNameRef,这取决于它所设置的“礼仪”是什么。

块子,这个工作,但一旦我把它放在一起,似乎已经停止工作------->

公共类nameChoice {

//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); 

    } 


} 
} 

如果它说第一次“伙计”,它总是说“伙计”。 如果它第一次说“先生”,它总是说“先生”。我试图从同一个阵列中每次选择一个不同的名字

我猜我需要把某种循环放在某个地方,让它随机选择名称,但我不知道在哪里。我会很高兴知道。 TY

回答

0

1)使ArrayList<String>全局值为null。

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

是您要添加到列表中的位置。 myName只是一个String,你想要一个ArrayList<String>

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(); 
} 

要检查布尔条件是===。你上面做的是把礼仪的价值设定为真,使其始终如一。

编辑:示例工作代码

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?"); 
    } 
} 
+0

@DJmendy我不知道你的意思,我粘贴以上工作代码,您可以复制/粘贴和尝试。请注意,在这种情况下,我不小心说'length'应该是'size()'。如果这个答案有帮助并回答你的问题,你能否将其标记为答案?我想得到一些点,以便我可以帮助更多的人,新的和所有我甚至不能发表评论,除非我发布回答哈哈 – JordanGS

+0

是的谢谢:)我删除了我的评论因为它甚至让我感到困惑。 是的,它不能与.length一起工作,所以在快速谷歌后,我将它切换到.size()。我想这是因为它是一个数组。谢谢你的帮助! – DJmendy

1

您使用==而不是=来检查一个条件。因此,每当您通过if (manners = true)时,您的礼仪布尔值将被设置为TRUE。