2016-11-07 3 views
0

На этой неделе началось только обучение кода, поэтому я, вероятно, слишком сильно опережу себя, но любая помощь будет потрясающей!Попытка дать мою программу «Манеры» (JAVA Beginner)

Я работаю над тем, чтобы попытаться дать моей программе две разные черты характера: формальные и неформальные.

Я попытался сделать это, используя логические «MANNERS», которые определяют каждую ссылку после нее (включая выбор имени), потому что функции могут быть проверены на соответствие одному логическому.

Каждый раз, когда myName является ссылкой, я хочу, чтобы он выбирал, наугад; либо формальныйNameRef, либо неофициальныйNameRef, в зависимости от того, на что он установлен «Манеры».

В части, это работает, но как только я все это вместе, кажется, перестал работать ------->

общественного класса 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; 
} 

Создать список переменных и инициализации обнулить.

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

Для проверки логических условий это ==, НЕ=. То, что вы делаете выше, устанавливает значение манер как истину, что делает ее всегда правдой.

EDIT: Пример рабочего кода

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() '. Если этот ответ был полезен и отвечает на ваш вопрос, можете ли вы пометить его как ответ? Я хотел бы получить несколько моментов, чтобы я мог помочь больше людей, будучи новыми, и все, что я даже не могу комментировать, если я не отправляю ответ haha ​​ – JordanGS

+0

Yep thanks :) Я удалил свой комментарий, потому что это сбивало с толку даже для меня. Да, он не работал с .length, поэтому после быстрого google я переключил его на .size(). Наверное, это потому, что это был массив. Спасибо за вашу помощь! – DJmendy

1

Вы проверяете состояние с помощью ==, а не = .. Таким образом, ваши манеры boolean устанавливаются на TRUE каждый раз, когда вы проходите мимо if (manners = true).

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