Расстояние зацикливания между двумя точками и q для выхода - PullRequest
3 голосов
/ 19 октября 2010

Это моя ситуация:

мне нужно, чтобы код запускался в цикле, снова и снова задавая один и тот же вопрос (и) пользователю, пока пользователь не введет «q» для любой точкизавершить / выйти из цикла, тем самым выйдя из программы.

Проблема в том, что я пытался использовать цикл do-while / while, и эти циклы выполняются только в том случае, если условия оказываются истинными.Но мне нужно, чтобы условие ("q") было ложным, чтобы оно могло продолжить цикл.Если условие истинно (input.equals ("q")), то оно просто ничего не делает, потому что вместо целого / двойного оно будет использовать строку ("q") для вычисления расстояния.

Я уже выяснил, как получить расстояние, код как есть, работает хорошо, но есть ли обходной путь, который я могу сделать, чтобы цикл продолжался, пока условие ложно?

и, кстати,Я только учусь Java на всякий случай ...

'.

import java.*;
public class Points {
public static void main(String[] args){

    java.util.Scanner input = new java.util.Scanner(System.in);

    System.out.print("Enter the first X coordinate: ");
    double x1 = input.nextDouble();
    System.out.print("Enter the first Y coordinate: ");
    double y1 = input.nextDouble();
    System.out.print("Enter the second X coordinate: ");
    double x2 = input.nextDouble();
    System.out.print("Enter the second Y coordinate: ");
    double y2 = input.nextDouble();
    System.out.println("(" + x1 + ", " + y1  + ")" + " " + "(" + x2 + ", " + y2+ ")");

    double getSolution = Math.sqrt(((x2-x1) * (x2-x1)) + ((y2-y1) * (y2-y1)));
    System.out.println(getSolution);
    }
}'

Ответы [ 3 ]

1 голос
/ 19 октября 2010

просто псевдокод:

while (! input.equals("q") )
// do something

Если пользователь вводит q, input.equals ("q") возвращает true, которое затем отменяется и разрывает циклы.

В противном случае, пользователь вводит другое число, скажем, 44, input.equals ("q") равно false, которое отменяется, и цикл продолжается.

1 голос
/ 19 октября 2010

Решением для этого является использование String line = input.nextLine() вместо nextDouble().Тогда у вас может быть такой метод:

public static boolean timeToExit(String input) {
    return input.equalsIgnoreCase("q");
}

Этот метод нужно будет вызывать каждый раз, когда пользователь вводит данные:

if (timeToExit(line)) break;

Это приведет к выходу из цикла.

Теперь, поскольку у вас есть строковое представление типа double, вам нужно будет использовать Double.parseDouble(line), чтобы превратить строку в число.

Тогда все, что вам нужно сделать, это заключитьвсе в бесконечном цикле -> while(true) { }

И единственный выход из цикла будет только в том случае, если метод timeToExit вернул значение true, и вы прервали цикл.

Это всепревращается во что-то вроде:

while (true) {
    ...
    System.out.print("Enter the first X coordinate: ");
    String x1 = input.nextLine();
    if (timeToExit(x1)) break;
    double x1_d = Double.parseDouble(x1);
    ...
}
0 голосов
/ 19 октября 2010

Я не вижу цикла в вашем коде ...: s

Но почему бы вам не попробовать это:

while(true)
{
  string input = // I don't remember the code to create a stream for standard input
  if(input == "q"){
    break;
  }
  else{
    java.util.Scanner inputWithNumbers = new java.util.Scanner(input);
    //---! All math operations here
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...