import java.io.*;
public class ManyTickets
{
public static void main (String [] args) throws IOException
{
String userInput;
String userInput2;
int intInput = 0;
int intInput2 = 0;
double total = 0.00;
//(1) BufferedReader ageInput = new BufferedReader (new InputStreamReader (System.in));
问题1:当我们将其更改为我标记为(2)的其他地方时,上行工作正常(1)。 但是在执行"请输入您的年龄"行时,尽管我在该语句之前创建了缓冲读者对象以保持大小写 (1)。我希望编译器应该等待用户输入,但它会打印语句。虽然我在尝试之前创建了年龄输入。
try{
System.out.println("Please enter your age, or press '999' to exit.");
//(2) BufferedReader ageInput = new BufferedReader (new InputStreamReader (System.in));
userInput = ageInput.readLine();
intInput = Integer.parseInt (userInput);
while (intInput != 999)
问题2:在按999执行时,如果我在不给空间的情况下键入999,则执行它会产生一些输出,但不退出。如何避免开头出现空格,就像我给出的一样,无论是999还是999或999,我都需要相同的输出。我需要退出,但不需要像 99 9 这样的输入;我需要避免输入(开头)中的空格的方法。
{
if (intInput < 0 || intInput > 110)
System.out.println("Invalid entry, or your age seems a bit too high to enter buy
tickets);
else if (intInput <= 12)
{
total = total + 6;
System.out.println("The ticket cost for 1 ticket is " + total);
}
else if (intInput <= 64)
{
total = total + 11;
System.out.println("The ticket cost for 1 ticket is " + total);
}
else
{
total = total + 8;
System.out.println("The ticket cost for 1 ticket is $" + total);
}
System.out.println("So far, your tickets cost is: $" + total );
System.out.print("Would you like to buy more tickets? You can buy up to 1 more ticket per customer! If no press 999to exit");
userInput = ageInput.readLine();
intInput2 = Integer.parseInt (userInput);
}
}catch (NumberFormatException e){
System.out.println("Please restart the program, and enter an integer instead!");
}
}
{
double total = 0.0;
System.out.println("Thank you, The total cost for the ticket is: $" + total);
System.out.println("Have a nice day!");
}
}
问题2:在按999执行时,如果我键入999而不给空间,它就会执行,它会给出一些输出.如何避免一开始出现空格,就像我给出的一样,无论是999还是999,我都需要相同的输出。我需要避免输入中出现空格的方法。
为避免空格,只需将它们从字符串中删除,如下所示:
userInput = ageInput.readLine().replaceAll(" ","");
intInput = Integer.parseInt (userInput);
问题 1:当我们将其更改为我标记为 (2) 的其他地方时,上面的行工作正常 (1)。 但是在执行"请输入您的年龄"行时,尽管我在该语句之前创建了缓冲读者对象以保持大小写 (1)。我希望编译器应该等待用户输入,但它会打印语句。虽然我在尝试之前创建了年龄输入。
这太模棱两可了。
答案 #1:
您在第 2 行之后请求用户输入,即在打印语句之后,因此它在提出问题后等待。如果将语句userInput = ageInput.readLine();
移到 print 语句之前(将缓冲读取器的实例化保留在第 1 行),那么它将等待用户输入,然后打印语句。
答案#2:
您可以使用 String 的 trim()
方法,如下所示:
userInput = ageInput.readLine().trim();
如果你需要用户定义的函数(我会避免),你可以做这样的事情:
public String myStringTrimmer() {
int len = value.length;
int st = 0;
char[] val = userInput.toCharArray();
while ((st < len) && (val[st] <= ' ')) {
st++;
}
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
return ((st > 0) || (len < value.length)) ? userInput.substring(st, len) : userInput;
}
只需使用修剪功能即可删除输入前后的空格
ageInput.readLine().trim()
这是trim()
方法的定义
public String trim() {
int len = value.length;
int st = 0;
char[] val = value; /* avoid getfield opcode */
while ((st < len) && (val[st] <= ' ')) {
st++;
}
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}
如果您只想删除第一部分,请删除第二部分
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
对于问题 2,readline()
负责获取输入。 您可以在readline
之前的任何位置创建buffered
reader
对象