java - 我可以强制控制台将价格和小费保持在同一条线上吗?

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

我总是在第一行获取价格,在另一行获取小费。

最佳答案

从你的措辞来看,你不喜欢通过扫描仪处理输入,在第一个 double 值(价格)上按 Enter 它会前进到下一行并等待第二个 double 值(小费率) .首先,字符“Enter”本质上是系统相关的换行符,因此当按下回车键时,扫描器会立即拆分输入。具体来说,扫描仪使用 Character.isWhiteSpace(char ch);函数来评估在哪里拆分 token 。

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

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

注意不要使用 (Scanner in).setDelimiter(String str) 因为这将避免破坏“\n”字符上的标记(如果 str String 是例如“”)并且只会卡住您的程序直到用户使用空格字符拆分 2 个输入,然后抛出 InputMismatchException,因为 12.3\n12.3 32.3 将是“有效”输入,但无法将标记“12.3\n12.3”评估为单个 Double 变量。

关于java - 我可以强制控制台将价格和小费保持在同一条线上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43470956/

相关文章:

java - Quarkus 如何指定 JNDI 数据源

eclipse - 无法在 Eclipse 中安装 Google 插件

asp.net - Visual Studio 2008、2010 或 2012 (v11) 是为使用多核而编写的吗?

ide - 如何让 Intellij 停止删除 Grails 内联插件模块依赖项?

eclipse - 如何为gradle subProjects创建目录结构?

c++ - 构建失败 Netbeans 7.4 C/C++

java - 如何以嵌入模式自动创建hsqldb

java - 如何从mongoDB中只提取一个值?

java - 使用 Java 在 Beanshell 中编辑 XML 值?

Eclipse 的 WTP 翻译输出