Java 我可以强制控制台保持price和tiprate在同一条线上吗?

Java 我可以强制控制台保持price和tiprate在同一条线上吗?,java,eclipse,ide,Java,Eclipse,Ide,我总是在第一行得到价格,在另一行得到提普拉特。使用System.out.println(代表打印行)代替System.out.print。System.out.println将在输出流中给定字符串之后打印换行符 您还可以将打印与单个打印行组合 例如,您可以使用: import java.util.Scanner; public class Tipping { public static void main(String[] args) { Scanner s = new Scann

我总是在第一行得到价格,在另一行得到提普拉特。

使用
System.out.println
(代表打印行)代替
System.out.print
System.out.println
将在输出流中给定字符串之后打印换行符

您还可以将打印与单个打印行组合

例如,您可以使用:

import java.util.Scanner;
public class Tipping {

  public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    System.out.print("Please enter initial price followed by tip percentage: ");
    double Price = s.nextDouble(); double TipRate = s.nextDouble();
    double TipAmount;
    TipAmount = (Price*TipRate)/100;
    System.out.println("Tip amount: " + TipAmount);
    System.out.print("Total price: " + (TipAmount + Price) +".");
  }}
更新 扫描器问题的简单解决方案是在一行中输入数字,用空格隔开。

当然,避免呼叫:

System.out.println(String.format("Tip amount: %f Total Price: %f", TipAmount, (TipAmount + Price)));
顾名思义,它会打印出一整条“线”;以换行结束

因此,要么多次调用System.out.print();或者更好的做法是:调用System.out.println()一次,但将希望打印到该调用中的字符串提供给all

正如我刚才看到的评论:您正在调用println()-在调用print()之前的行中

给出您的评论:您必须了解扫描仪是如何工作的。扫描仪读取字符串;默认情况下,一行一行

换句话说:当您使用
nextDouble()
时,扫描仪会假定您将输入一个表示数字的字符串,但用户按enter键会“终止”您的输入。换言之;那些断线是不可避免的

因此,简单地像这样处理它们:

System.out.println()

长话短说:当像这样使用控制台输入/输出时;您无法阻止某些换行。简单地接受这一点,不要过分追求完美主义。

从你的措辞来看,你不喜欢通过扫描仪处理输入,在第一个双倍值(价格)上按Enter键,然后进入下一行,等待第二个双倍值(提普拉特)。首先,字符“Enter”本质上是依赖于系统的新行字符,因此当按下Enter键时,扫描仪会立即分割输入。具体来说,扫描仪使用字符.isWhiteSpace(char ch);函数来计算分割令牌的位置

这完全取决于您希望如何处理输入。遗憾的是,如果不导入Curses-esque库并使用自定义命令提示符,“\n”字符将无法反转。您可以做的是写入输入并用空格分隔,例如,写入“23.4 12.3”将在同一行中写入输入,并正确地将该行拆分为您想要的2个标记

如果纯粹出于美观原因,您可以将令牌捕获为字符串,评估其中是否存在“\n”字符,并要求用户在一行中重新输入变量,或者,如果“\n”字符不存在,则在“”字符上拆分字符串,然后使用Double.valueOf(String str);功能


注意不要使用(Scanner in).setDelimiter(String str),因为这样可以避免断开“\n”字符上的标记(例如str字符串为“”),并且只会冻结程序,直到用户将2个输入与空格字符分开,然后抛出InputMismatchException,因为12.3\n12.3 32.3将是“有效的”输入,但标记“12.3\n12.3”无法计算为一个双变量。

如果要打印不带换行符的内容,请不要使用println。我不使用println作为价格,请仔细查看。请注意:您想了解java命名约定。变量名大小写相同;像提帕蒙特;不是提帕蒙特!哦,那是件坏事吗?对不起,我是新来的,我今天才开始……哦,不要为你不是故意做的事情而生自己的气,因为那对你不好。将其标记为一种积极的体验,让您继续前进--->。我不是使用println作为价格,而是仔细查看小费,这样它会以换行符结束该行,然后将打印总价格。使用
System.out.print(“小费金额:+TipAmount”);System.out.println(“总价:+(TipAmount+价格)+”)我说的是第4行,用户应该输入价格,然后输入提普拉特,提普拉特总是跳到下一行,为什么这不是你问题的一部分?!我说的是第4行,用户应该输入价格,然后输入提普拉特,提普拉特总是跳到下一行。我认为作为开发人员,我不能只解决我不喜欢的事情,而是寻求如何改变它们。不幸的是,我没有考虑过完美主义。谢谢你的回答;)请仔细阅读:直接使用控制台,这样的事情很难做到。如果您的需求是“完美”的用户体验,那么您可能需要创建一个GUI,或者使用一个提供您功能的库。换句话说:完美是可能的,但它不是免费的!没错。你帮了大忙。非常感谢你。我将开始调查你所说的那些诅咒空格键工作得很好,谢谢你@Alex Papageorgiou。你的想法是对的;我错过了;所以,享受这小小的投票吧;-)
System.out.print("Please enter initial price: ");
double Price = s.nextDouble(); 
System.out.print("Please enter tip percentage: ");
double TipRate = s.nextDouble();

double TipAmount = (Price*TipRate)/100;
System.out.println("Tip amount: " + TipAmount + " results in Total price: " + (TipAmount + Price) +".");