2015-04-30 2 views
-1

Я начинающий программист, и в настоящее время я ударяю головой о стену над этим заданием. Мне нужно создать программу, которая «имитирует» использование автомобиля, поэтому он идет: диск, парк и заполнение. Первое, что он делает, это спросить, сколько литров газа, которое может хранить ваш бак, и сколько литров в настоящее время находится в баке. Затем он спрашивает у пользователя, хочет ли он a) диск, b) заполнить или c) припарковать. Мне нужно захватить пользовательский ввод (который я уже знаю, как это сделать), и в зависимости от того, входит ли пользователь в a, b или c, он переходит к этому определенному блоку кода и запускает его.if, else if, else statements: В блоках кода

Вот конкретные инструкции о том, а, Ь, с должны сделать: а) Привод: 1. введите сумму Km приводимый (пользователь вводит этот) 2. Вывод сколько литров газа были и количество газа, оставшегося в резервуаре. (мы предполагаем, что автомобиль использует в среднем 0,1 л/км)

b) Заполните 1. Пользователь должен указать количество литров, которые они хотят добавить 2. Выходное количество литров в баке. (пользователь не может вводить больше литров, чем резервуар может удерживать)

c) Парк 1. Выходное количество литров в баке и общее количество управляемых км. 2. Выход из петли

Я использую правильный вид петли? Как получить код для запуска уравнения (посмотрите на красные подчеркнутые линии)? Пожалуйста, помоги мне, я так потерялся.

public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("How many litres of gas can your tank hold?"); 
     int litreCap = scan.nextInt(); 
     System.out.println("How much gas is currently in your tank?"); 
     int startingLitre = scan.nextInt(); 
     System.out.println("Ok! Do you want to \n a) Drive \n b) Fill up, or \n c) Park"); 
     String abc = scan.next(); 
     String a, b, c; 
     a = String.valueOf(1); //Wasn't sure if the problem had to do with the fact 
     b = String.valueOf(2); //That I hadn't identified a,b and c 
     c = String.valueOf(3); 
     double litresUsed, gasTotal; 

     if (abc .equals(a)) { //this is the drive section 
      System.out.println("Please enter the amount of Kilometers driven."); 
      int KmCount = scan.nextInt(); 
      litresUsed = 0.1*KmCount;//underlined yellow 
      startingLitre - litresUsed = gasTotal;//this is underlined red 
      } 
     else if (abc .equals(b)){ //this is the fill up section 
      System.out.println("OK! Please enter how many litres you are going to add."); 
      int litresAdded = scan.nextInt(); //this is underlined yellow 
      litresUsed + litresAdded = gasTotal; //underlined red 
     } 
     else { 
      //enter c) Park code here 
     } 
    } 

} 
+0

Я не вижу никакой петли в вашем коде? если a, b и c - String, то что такое abc? Я никогда не видел, чтобы вы могли конкатенировать такие строки? !!! ** можете ли вы даже запустить свой код? ** –

+0

Позвольте мне предложить вам добавить более описательные имена для переменных, например, вместо 'a', использовать что-то вроде' driveSelected'. Что-то, что поможет вам (и другим после вас) помнить, что опция (a) - это то, что пользователь хочет водить. – germanio

+0

что-то еще: 'startLitre - litresUsed = gasTotal;' помните, что когда вы присваиваете что-то переменной, целевая переменная идет слева, источник (выражение, другая переменная, метод выполняется) идет по правой стороне заявление, например: 'gasTotal = startLitre - litresUsed;' – germanio

ответ

2

Я пытался понять, что именно вы должны сделать, как на ваш пост. Я предложу следующие корректировки в вашем коде:

  1. Требуется, наконец, распечатать пробег в километрах.Таким образом, вы должны представила новую переменную int сказать runKm и инициализируется 0, прежде чем начать цикл вроде:

    int runKM = 0; 
    
  2. Вы заявили в своем сообщении, что программа должна цикл до пользователь хочет, чтобы выйти из выбирающих петли сначала «c», а затем 2. Поэтому для того, чтобы иметь петлю, вы должны ввели while петли с новой boolean переменным сказать continued инициированных в true и начать while цикл с переменной continued как его проверкой состояние и, наконец, закрыть его после всех if - else блоков, как это:

    boolean continued = true; 
    while(continued){ 
    //The checking conditions are implemented 
    } 
    

    Это приводит к зацикливание до потребителя выбрать c и затем 2.

  3. Я хотел бы предложить вам изменили scan.next() на scan.nextLine() отфильтровать неправильные входные данные от пользователей, которые будут обработаны в else состояния if - else блока.

  4. String a, b, c поскольку они не требуются, поэтому удалите их со своими ссылками в программе.

  5. Теперь вы должны изменили условия if и else if сравнить вход непосредственно к значению String требуемого Так что вам не нужны переменные a, b, c. как это:

    abc.equals("a") //instead of abc.equals(a) 
    abc.equals("b") //instead of abc.equals(b) 
    
  6. В a состоянии if-else блока, вам требуется, чтобы добавить новую строку runKM += KmCount;, чтобы следить за всеми километров пробега. это также можно записать как runKM = runKM + KmCount; оба эквивалентны.

  7. Вы требуете, чтобы исправили линию litresUsed + litresAdded = gasTotal, которая в основном уравнение равенства в математике, а не оператор присваивания в программировании, чтобы startingLiter = startingLitre - litresUsed; как вы должны отслеживать все количество газа, используемый и количество газа, наполненное вверх. Это заявление могло быть написано как startingLiter -= litresUsed; оба эквивалентны.

  8. Вам необходимо исправить ваше математическое уравнение litresUsed + litresAdded = gasTotal;, что не имеет никакого смысла, в заявлении о программировании startingLitre = startingLitre + litresAdded;, поскольку вы в основном добавляете к себе количество, оставшееся в баке.

  9. Необходимо ввести новое состояние else if для входа c. Для этого требуется второй ввод 1 или 2, как указано в вашем оригинальном посте. И, основываясь на втором вводе, если 1, то он печатает статус, то есть KM run и Liter в баке. и 2 или любые другие int изменяет переменную continued на false, которая приводит к выходу из while loop. как это:

    else if(abc.equals("c")) { 
        System.out.println("OK! Parked!!! What do you want to do?\n 1)Check your car status\n 2) exit ") 
        int response = scan.nextInt(); 
        if(response == 1){ 
         System.out.println("Number of KM run = "+runKM +"\nAmount of litre in tank = "+startingLitre); 
        }else { 
         continued = false; 
        } 
    } 
    
  10. И, наконец, вы должны положить else условие, которое не удовлетворяет ввод пользователя либо a, b или c.И напишите соответствующее сообщение для пользователя и повторите цикл следующим образом.

    else{ 
        System.out.println("Wrong value entered. Please try again"); 
        continue; 
    } 
    
+1

ваше сообщение было помечено как ответ низкого качества. предоставьте некоторое объяснение. –

+0

@ KickButtowski Я надеюсь, что это будет нормально. – Blip

+0

Я не голосовал, но я попытаюсь изучить ваш ответ и проголосовать за вас. –

0

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

Первое:

String abc = scan.next(); 
String a, b, c; 
a = String.valueOf(1); 
b = String.valueOf(2); 
c = String.valueOf(3); 

Если вы хотите прочитать параметр пользователя из командной строки, вы можете уже иметь его в abc переменной. Просто используйте блок if/if-else/else для запроса значения этой переменной.

Второе:

startingLitre - litresUsed = gasTotal; 

Когда вы присваиваете что-то переменной, целевая переменная выходит на левой, источник (выражение, уравнение, другой переменной или даже вызов метода) идет на правой стороне заявления, как это:

gasTotal = startingLitre - litresUsed; 

Надеется, что это помогает. Вы всегда можете проверить уроки Oracle и информацию о классе, как этот: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html и это одна: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html

+0

как вы собираетесь объяснить abc в op-коде? –

+0

OP должен объяснить свой собственный код, для меня кажется, что 'abc' предназначен для чтения пользовательского ввода. Но главное, как работают уравнения, которые объясняет мой ответ. – germanio

+0

@KickButtowski: у этого кода есть некоторые ошибки, я согласен, но я не буду решать их все для него/нее, цель этого упражнения - практиковать и учиться, правильно? – germanio

0

Спасибо всем за помощь, я был в состоянии очистить код и забрать все ненужные вещи. Так оно и закончилось, и теперь он отлично работает (на всякий случай кто-то наткнется на этот вопрос и хочет увидеть последний рабочий продукт)! Я определенно многому научился этому.

public class CarGame { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("How many litres of gas can your tank hold?"); 
     int litreCap = scan.nextInt(); 

     System.out.println("How much gas is currently in your tank?"); 
     int startingLitre = scan.nextInt(); 

     System.out.println("Ok! Do you want to \n a) Drive \n b) Fill up, or \n c) Park"); 
     String abc = scan.next(); 

     int litresUsed; 
     int runKM = 0; //Kilometer counter (N.M 2015) 

     boolean continued = true;//Keeps looping a, b, and c until user either parks or errs (N.M 2015) 
     while(continued){ 

     if (abc .equals("a")) { //Drive section (N.M 2015) 
      System.out.println("Please enter the amount of Kilometers driven."); 
      int KmCount = scan.nextInt(); 
      litresUsed = (int) (0.1*KmCount); 
      startingLitre = startingLitre - litresUsed; 
      runKM = runKM + KmCount; 
       if (startingLitre <= 0) { //this is the error 
        System.err.println("Uh-oh! You ran out of gas! Try again."); 
       break; //If they run out of gas, the program ends like a game over (N.M 2015) 
       } 
      System.out.println("You used " + litresUsed + " litre(s) of gas. That leaves you with \n" + startingLitre + " litres of gas."); 
      System.out.println("You have driven for " + runKM + " kilometers."); 

      System.out.println("What do you want to do now? \n a) Drive \n b) Fill up, or \n c) Park"); 
      abc = scan.next(); 
      continued = true; 
      } 
     else if (abc .equals("b")){ //Fill up section (N.M 2015) 
      System.out.println("OK! Please enter how many litres you are going to add."); 
      int litresAdded = scan.nextInt(); 
      startingLitre = startingLitre + litresAdded; 
       if (startingLitre > litreCap){ //this is the error 
       System.err.println("Hey! That is too much gas! Your tank can only hold " + litreCap + " litres of gas!"); 
       break; 
       } 
      System.out.println("You added " + litresAdded + " litres of gas. Now, your car has " + startingLitre + " litres of gas."); 

      System.out.println("What would you like to do now? \n a) Drive \n b) Fill up, or \n c) Park"); 
      abc = scan.next(); 
      continued = true; 
     } 
     else if (abc .equals("c")) { //Park section (N.M 2015) 
      System.out.println("You have now parked!"); 
      System.out.println("Number of Km run: " + runKM + "\nAmount of litres in tank: " + startingLitre); 
      continued = false; //ends program (N.M 2015) 
     } 
     else { 
      continued = false; //ends program (N.M 2015) 
     } 
    } 
    } 

}