Строки и циклы - PullRequest
       9

Строки и циклы

2 голосов
/ 19 февраля 2012

Я думаю, что у меня проблемы со строками и циклами while. Когда я запускаю эту программу и набираю действие, программа ничего не делает. Он не выходит, он просто сидит там. Вот почему я думаю, что это проблема с моим циклом while. Но я думаю, что это также может быть с моими строками прямо перед циклом while. Я правильно объявляю эти строки? Или я неправильно сравниваю их в цикле while? Спасибо за помощь.

import java.util.Scanner;

public class HW2tester3 {

    public static void main(String args[]) {

        MotorBoat ex3 = new MotorBoat();
        Scanner keyboard = new Scanner(System.in);
        System.out.printf("Input how fast the motorboat was going: ");
        int s = keyboard.nextInt();
        ex3.ChangeSpeed(s);
        System.out.printf("Input the time the motorboat ran: ");
        int t = keyboard.nextInt();
        ex3.OperatingTime(t);

        // Ask the user what action he or she wants to take
        System.out.printf("If you want your distance travelled type:" + 
                          " distance\n");
        System.out.printf("If you want how much fuel you used type: fuel\n");
        System.out.printf("If you want to refuel type: refuel\n");
        System.out.printf("If you are finished type: done\n");
        System.out.printf("What would you like to do? ");

        // Compares the input with the defined strings and preforms the
        //   the action requested
        String a = keyboard.nextLine();
        String b = "done";
        String c = "distance";
        String d = "fuel";
        String e = "refuel";
        if (a != b) {
            while (a != b) {
                a = keyboard.nextLine();
                if (a == c) {
                    ex3.getDistance();
                }
                else if (a == d) {
                    ex3.getFuelUsed();
                }
                else if (a == e) {
                    ex3.Refuel();
                }
            }
        }
        if (a == b) {
            System.exit(0);
        }
    }
}

Ответы [ 4 ]

4 голосов
/ 19 февраля 2012

a == b не сравнивает значение двух строк, скорее, a и b представляют одни и те же объекты.То же самое для !=.

Вы хотите использовать a.equals(b), а не a == b.

2 голосов
/ 19 февраля 2012

a == b проверяет, являются ли a и b одним и тем же объектом, что не всегда имеет место для строк.Вместо этого используйте string.equals().

Также используйте имена переменных, между которыми вы можете различать.a, b, c, d и т. Д. Являются не хорошими именами переменных и часто приводят вас в замешательство.

При этом попробуйте следующее:

String input = "";

do {
  input = keyboard.nextLine();

  if (input.equals("distance")) {
    ex3.getDistance();
  } else if (input.equals("fuel")) {
      ex3.getFuelUsed();
  } else if (input.equals("refuel")) {
      ex3.Refuel();
  }
} while (!input.equals("done"));

System.exit(0);
1 голос
/ 09 марта 2014

Оператор «==» можно использовать для проверки примитивных значений на равенство (т. Е. Int, char, boolean ...).

Однако, когда вы сравниваете две переменные ссылки на объект с помощью оператора "==", вы фактически проверяете, указывают ли две ссылки на один и тот же объект.

Rectangle box1 = new Rectangle(5, 10, 20, 30); 
Rectangle box2 = box1;
Rectangle box3 = new Rectangle(5, 10, 20, 30);

Сравнение:

box1 == box2; // true;

Сравнение:

box1 == box3; // false;

Для сравнения содержимого объектов используйте метод equals (Object), который вернет true, если два объекта имеют одинаковое содержимое.

String a = "distance";
String b = "done";
if(a.equals(b)){
  //code...
}
1 голос
/ 19 февраля 2012

В Java вы не можете сравнивать строки с == или! =

Используйте a.equals(b) и !a.equals(b)

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