两点之间的循环距离,以及q用于退出。

3
这是我的情况:
我需要一段循环代码,反复向用户询问相同的问题,直到用户键入“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);
    }
}'

2
终于有一个作业问题,用户真的尝试了 :) - Ashley Grenon
1
你知道 ! 运算符吗? - nmichaels
3个回答

1
解决方法是使用{{link1:String line = input.nextLine()}}而不是nextDouble()。然后你可以有一个像这样的方法:
public static boolean timeToExit(String input) {
    return input.equalsIgnoreCase("q");
}

每次用户输入时都需要调用此方法:

if (timeToExit(line)) break;

这将退出循环。

现在,由于您有双精度的字符串表示形式,您需要使用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);
    ...
}

谢谢,它有效了。我还必须将getSoulition变量更改为parseDouble...天啊,我需要更多的练习。我知道解析的概念,但从未意识到过。 - Carlos_Gomez

1

只是一些伪代码:

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

如果用户输入了q,input.equals("q")将返回true,然后被取反并且退出循环。
否则,如果用户输入了另一个数字,比如44,input.equals("q")将返回false,然后被取反并且循环继续。

我不是Java程序员,但这应该允许您循环直到用户键入“q”。 - Ashley Grenon
1
我不是Java专家,所以我尽量保持它与语言无关 :( 有什么更改可以让它工作吗?只是好奇!谢谢!编辑:啊,我明白了...是数字转字符串的部分吗? - Ashley Grenon
那个不起作用,编译可以通过但循环只运行一次,如果我输入“q”,就会出现运行时错误... - Carlos_Gomez

0

我在你的代码中没有看到循环... :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
  }
}

如果用户输入了一个数字,这个解决方案将会忽略一个输入。 - jjnguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接