正在调用格式化方法



我很困惑如何调用格式化方法,以便在字符串中打印int

//call
boatPrice = inputBoatPrice("Please enter the price of the boat, must be > :", 0.0);
//method
public static double inputBoatPrice(String messagePassed, double limitPassed) {
    Scanner keyboard = new Scanner(System.in);
    int userInput;
    do {
        System.out.printf("%1s %1.2fn", messagePassed, limitPassed);
        userInput = keyboard.nextInt();
    }  while(userInput < limitPassed);
    return userInput;
} //end method

我如何解决这个问题,以便打印出呼叫:

"请输入船的价格,必须大于0.0:"

目前它打印出

"请输入船的价格,必须>:0.00"

只需将您的printf调整为:

System.out.printf("%1s %1.1fn", messagePassed, limitPassed);

您的格式字符串包含%1.2f,这意味着至少打印一位数的总数和句点后的两位数。将其更改为%1.1f将意味着打印至少1位数的总计和该时段后的1位数。

您可以在Formatter下的Javadoc中找到这一点。第一个数字是宽度,第二个数字是精度。来自Javadoc:

宽度

宽度是要写入输出的最小字符数。对于行分隔符转换,宽度不适用;如果提供了它,将引发异常。

精度

对于一般参数类型,精度是要写入输出的最大字符数。

对于浮点转换'e'、'e'和'f',精度是小数分隔符后的位数

只需更改

System.out.printf("%1s %1.2fn", messagePassed, limitPassed);

System.out.printf(messagePassed, limitPassed);

和你的字符串到

"Please enter the price of the boat, must be > %1.1f :"

这有助于更正字符串的问题。

您还必须调整userInput变量,因为您想要读取doubles(至少您要求使用doublevalue,因此您应该只接受doublevalue)。这意味着将userInputkeyboard.nextInt();的类型更改为keyboard.nextDouble();

编辑::我想你所想做的就是以1.1的特定格式打印,末尾有冒号。那么你需要这个:

public static void main(String[] args) {
        inputBoatPrice("Please enter the price of the boat, must be >",0.0);
    }
    public static double inputBoatPrice(String messagePassed, double limitPassed) {
        Scanner keyboard = new Scanner(System.in);
        int userInput;
        do {
            System.out.printf("%1s %1.1f :n", messagePassed, limitPassed);
            userInput = keyboard.nextInt();
        }  while(userInput < limitPassed);
        return userInput;
    }

我对您的代码进行了一些调整:

double boatPrice = inputBoatPrice("Please enter the price of the boat, must be > ", 0.0);
public static double inputBoatPrice(String messagePassed, double limitPassed) {
    Scanner keyboard = new Scanner(System.in);
    int userInput;
    do {
         System.out.print(messagePassed + limitPassed + ":");
         userInput = keyboard.nextInt();
    }  while(userInput < limitPassed);
    return userInput;
}

您需要将System.out.print从:更改为

System.out.printf("%1s %1.2fn", messagePassed, limitPassed);

至:

System.out.print(messagePassed + limitPassed + ":");

同时编辑调用inputBoatPrice:方法时传递的字符串

("...must be > :") to ("...must be > ")

试着用这个来调整你的printf和正确的返回类型:

  public static double inputBoatPrice(String messagePassed, double limitPassed)
  {
      Scanner keyboard = new Scanner(System.in);
      double userInput;
  do {
        System.out.printf("%1s %1.1fn", messagePassed, limitPassed);
        userInput = keyboard.nextDouble();
     } while(userInput < limitPassed);
       return userInput;
  }

最新更新