2016-11-07 33 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。