我可以强制控制台将价格和技巧保持在同一条线上吗?

时间:2017-04-18 11:30:50

标签: java eclipse ide

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) +".");
  }}

我总是在第一行得到价格而在另一行得到提示。

3 个答案:

答案 0 :(得分:1)

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

您还可以将打印件与单个打印行组合在一起。

例如,你可以使用它:

System.out.println(String.format("Tip amount: %f Total Price: %f", TipAmount, (TipAmount + Price)));

更新

扫描仪问题的简单解决方案是将数字输入一行用空格分隔。

答案 1 :(得分:1)

当然,请不要打电话:

System.out.println()

正如名称(某种程度上)所示,它打印出一条完整的"线&#34 ;;以换行符结束

所以,多次调用System.out.print();或者更好的练习:调用System.out.println()一次,但是将所有字符串提供给您想要打印到该调用的字符串。

正如我刚刚看到你的评论:你在调用print()之前调用println() - 就行了!

鉴于您的评论:您必须了解该扫描仪的工作原理。扫描仪读取字符串;默认情况下,逐行。

换句话说:当您使用nextDouble()时,扫描程序会假定您将输入一个代表数字的字符串 - 但您的输入已被"终止"由用户按ENTER键。换一种说法;那些换行是不可避免的!

所以,只需处理它们就像:

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) +".");

长话短说:这样使用控制台进/出时;你不能阻止某些换行。简单地接受这一点,并且不要完全接受完美主义。

答案 2 :(得分:1)

根据你的措辞判断,当你通过扫描仪处理输入时,你不喜欢它,按下第一个双倍值(价格)的Enter键,它前进到下一行并等待第二个双倍值(The TipRate)。首先,角色"输入"本质上是系统相关的换行符,因此当按下回车键时,扫描仪会立即拆分输入。具体来说,Scanner使用Character.isWhiteSpace(char ch);用于评估分割令牌的位置。

这完全取决于您希望如何处理输入。遗憾的是,如果不导入Curses-esque库并使用自定义命令提示符," \ n"性格无法逆转。你能做的就是写下你的输入并用空格分隔,例如写作" 23.4 12.3"将输入写入同一行并正确地将行分成您想要的2个标记。

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

请注意不要使用(Scanner in).setDelimiter(String str),因为这样可以避免破坏" \ n" character(如果str String是例如"")并且只会冻结你的程序,直到用户用空格字符分割2个输入然后抛出一个InputMismatchException,因为12.3 \ n12.3 32.3将是&# 34;有效"输入但令牌" 12.3 \ n12.3"不能评估为单个Double变量。