2015-04-08 6 views
0

Это мое первое сообщение здесь, поэтому я решил просмотреть различные сообщения здесь, чтобы попытаться понять, как должны быть опубликованы вопросы.Использование сканера для изменения boolean в java

Следовательно, если я испортил, пожалуйста, дайте мне знать, чтобы я мог исправить свое сообщение соответственно как можно скорее.

Так вот моя проблема:

Я начал изучать Java сегодня, и я работаю просто получить чувство для того, как все работает. У меня есть приведенный ниже код, чтобы сообщить, хороши или плохи дети, и отображать соответствующие повторы.

Хорошие дети получают конфеты, плохие дети не получают ни одного. Я хочу иметь возможность ограничить выбор пользователей хорошим или плохим и изменить их ответ Boolean на true или false, чтобы запустить правую if.

Я видел Math.random способ сделать это, но когда я попробовал, у меня появилось больше проблем.

Спасибо за ваше время.

Ниже мой код:

import java.util.Scanner; 

public class Main { 
    public static void main (String args[]) { 
     //take user info 
     Scanner sc = new Scanner(System.in); 

     int candy = 12; 
     int kids = 4; 
     int bad = 1; 
     String a = sc.nextLine(); 
     int answer = candy/kids; 
     String answer2 = "No Candy"; 
     boolean good = false; 

     System.out.println(a); 
     //closeing the scanner 
     sc.close(); 

     if(bad == 1) { 
      System.out.println(answer2); 
     } else { 
      if(bad == 2) 
       good = true; 
      System.out.println(answer); 
     } 
     if(good == true) { 
      System.out.println("Good Job"); 
     } else { 
      System.out.println("Try again tomorrow!"); 
     } 
    } 
} 
+1

Непонятно, что именно вы хотите здесь сделать. Можете ли вы точно указать, какой ожидаемый результат для каждого входа? –

+0

Я думаю, что запутанная часть - это случайная математика, которую она дозирует. Этот код является моим первым кодом, поэтому я более или менее использую один класс для тестирования различных концепций и просмотра того, что я делаю с тем, что я узнал за последние 3 часа или около того. Если вы выберете случайную математику, код (по крайней мере, то, что я сейчас пытаюсь сделать), спросите пользователя, сколько детей есть, если они были хорошими или плохими, тогда выведите сообщение о том, что хорошие дети получают конфеты и плохие дети делают не. Математика делит конфеты на детей. В настоящее время, если вы изменили значение int bad = 1; - 2, он запустит команду «Снова повторить завтра». – Toxicy

ответ

0

Для этого не нужно заканчивать сканер до того, как закончится ваш код. Вы можете оставить его, закрыв его, не нужно. (Если ваша среда IDE не заставляет вас, то да, вы должны, но на самом деле закройте ее в конце. У меня Eclipse, поэтому мой код по-прежнему работает без сбоев.)

Еще один комментарий, только ради этого из эстетики вы должны конкатенировать какую-то строку в конце answer, поэтому читатель понимает, что означает переменная.

Еще одна вещь. Мне часто бывает полезно назвать мой сканер чем-то более интуитивным, например, входным. Потому что в конце концов, так оно и есть.(Я только комментирую много о вашем коде, потому что вы только начинаете изучать вещи, поэтому рано вставать в хорошие привычки.)

Что вы можете сделать в этой ситуации, это преобразовать ваши вводы строки в булевы, используя boolean userInput = Boolean.parseBoolean(answer). Затем, в зависимости от ввода, который пользователь дает с помощью оператора if, они могут управлять потоком кода.

Я немного очистил ваш код, если вы не возражаете.

import java.util.Scanner; 
public class lol { 
    public static void main (String args[]){ 
    //take user info 
    Scanner sc = new Scanner(System.in); 


    int candy = 12; 
    int kids = 4; 
    int answer = candy/kids; 
    String answer2 = "No Candy"; 

    System.out.println("Are youkids good or bad?"); 
    System.out.println("[1] Good = true"); 
    System.out.println("[2] Bad = false"); 
    String a = sc.nextLine(); 
    boolean userInput = Boolean.parseBoolean(a); 

    if(userInput== false){ 
     System.out.println(answer2); 
     System.out.println("Try again tomorrow!"); 
    } 
    else{ 
     System.out.println("Good Job"); 
     System.out.println("You get" +answer+"pieces."); 
    } 
} 

}

+0

@joe jones Добро пожаловать на Java и переполнение стека, мой друг. –

+0

Благодарим вас за комментарии, я немного волновался за самообучение, потому что я не хочу иметь плохие привычки кодирования. Так что благодарю вас так много за этот совет. Итак, я узнал о Integer.parseInt(); но новичок в этом не знал, что существует булева версия. Все готовые генераторы случайных чисел, которые вы угадываете от 1 до 10, и компьютер сравнивает его число (используя Math.floor (Math.random()) против вас и сообщает вам, правильно ли вы это угадали. чтобы принять пользовательский ввод для хороших и плохих детей, а затем попытаться добавить математику в код, чтобы узнать, могу ли я это сделать. – Toxicy

+0

Нет проблем.Если вам нужны ресурсы, вы должны придерживаться одного учебника, это действительно поможет в будущем. У меня было несколько классов, но я рекомендую «Введение в программирование на Java» Я. Даниэля Ляна. Кроме того, я использую сайт codingbat.com, который имеет множество упражнений с Java. И, наконец, как только вы получите немного более опытный, есть веб-сайт под названием projecteuler.com, который использует много математики и множество циклов, если это ваша вещь. Самообучение действительно сложно, но если вы останетесь посвященным, определенно окупается. также поможет вам. –

0

Видя, как вы только начинаете, я буду стараться и держать его просто. Существует множество способов заставить вашего читателя сказать «хорошие» или «плохие», которые лучше, чем ниже, но для них требуются петли (которые, я полагаю, вы еще не коснулись).

Рассмотрим следующий пример:

boolean good = false; 
if (a.equals("good")) { // they said good 
    good = true; 
} else if (a.equals("bad")) { // they said bad 
    good = false; 
} else { // they said neither 
    System.out.println("You didn't say a correct word!"); 
} 

Вы сначала указать, что у вас есть boolean good (который вы можете дать значение по умолчанию, как описано выше, или ничего). Затем, в зависимости от ввода пользователя, вы можете установить логическое значение как угодно.

Причина, связанная с необходимостью объявить boolean good выше операторов if, связана с областью действия переменной. Если ваша книга/учитель не объяснила, что это такое, вы должны посмотреть ее сейчас. TL; DR - это то, что если вы только сначала объявляете свою переменную внутри операторов if, она исчезает, как только вы выходите из операторов if. Вы можете видеть, как в этом случае это в основном превзойдет цели всех утверждений if.

+0

У меня нет никого, кто учит меня, я использую случайные сайты, чтобы учиться, поэтому мне трудно найти контент, который следует по пути от начала до конца, но я в основном получаю основы, которые я чувствую. Таким образом, мое использование двух разных статусов if/else не требуется и может быть сокращено вашим примером else, если? (Я еще не видел другого, я предполагаю, что он еще раз повторится «если» до последнего) Я не знал, что Boolean можно оставить пустым. Я думал, что они должны быть истинными или фальшивыми, чтобы начать так, знать! – Toxicy

0

Вы можете ограничить ввод, включив его в петлю.

List<String> accepted = new ArrayList<String>(); 
accepted.add("good"); 
accepted.add("bad"); 

System.out.println("Good or bad?"); 
String input = sc.nextLine(); 
while(!accepted.contains(input)) { 
    System.out.println("Invalid query '" + input + "'. Try again."); 
    input = sc.nextLine(); 
} 

Код, который у вас есть, но я не знаю точно, что он пытается сделать. Он не выглядит функциональным вообще. Поэтому, когда это подходит, я не уверен на 100%.

+0

Вы действительно просто вводили списки и циклы тому, кто говорит, что это их первый день обучения JAVA? – NoseKnowsAll

+0

Я действительно представил две очень простые конструкции, которые каждый человек, который когда-либо кодирует на Java, должен знать, как использовать? Почему да, да. Это просто: если вы хотите получить правильный ввод, вам нужно использовать цикл. И да, я использовал список вместо массива, но OP уже использует Scanner, который значительно сложнее List ... Как, честно говоря, этот код настолько прост, что он действительно читается, как английский! – Hailey

+0

Я еще не дошел до сведения о массивах. Я думаю, что он подходит. это всего лишь код Im, работающий над тем, чтобы я понял концепцию кодирования по всем. У меня нет действительно всей цели с кодом, поэтому нет четкой цели для кода. Просто убедитесь, что я могу заставить оператор if работать или импортировать предмет сканера. Благодарим за помощь:> ps. «Как, честно говоря, этот код настолько прост, что на самом деле он читается, как английский!» HAHAHAHAHAH! omg that's amazing – Toxicy

0
package test; 

import java.util.Scanner; 

public class app { 

public static void main (String args[]){ 
    //take user info 
    Scanner sc = new Scanner(System.in); 
    String a="?"; 

    while(!a.equals("good") && !a.equals("bad")){ 
     System.out.println("Was the kid good or bad ?"); 
     a = sc.nextLine(); 
    } 

    boolean wasKidGood = a.equals("good"); 
    String result = (wasKidGood ? "Good kid gets candy" : "No candy for bad kid"); 
    System.out.println(result); 
    sc.close(); 
    } 
} 

Здравствуйте, я написал что-то, что поможет вам понять, в то время цикла и тройной оператор (альтернативная версия, если петли). Вам также нужно обратить внимание на то, где вам разрешено использовать ==, и где вы должны использовать метод equals(). С уважением