简单的java输入字符串

时间:2014-12-27 06:24:03

标签: java input flow

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)。  //但是在执行“请输入你的年龄”时,第一行虽然我在case(1)中的那个语句之前创建了bufferedreader对象。我希望编译器应该等待用户输入,但它会打印语句。虽然我在尝试之前创建了ageInput。

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而没有给出空格它是执行它给出一些输出而不是exit.how以避免开头的空格,就像我给出的无论是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!");
       }
       }

3 个答案:

答案 0 :(得分:0)

只需使用修剪功能删除输入前后的空格

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()负责获取输入。您可以在buffered

之前的任意位置创建reader readline个对象

答案 1 :(得分:0)

  

问题2:当执行999时,如果我输入999而没有给出空格,则执行它会给出一些输出。如何避免开头的空格,就像我给出的无论是999还是999我需要相同的输出。我需要方法来避免输入中的空格。

要避免使用空格,只需将其从字符串中删除,如下所示:

userInput = ageInput.readLine().replaceAll(" ","");
intInput = Integer.parseInt (userInput);
  

问题1:当我们将其更改为标记为(2)的其他地方时,上面的行正常(1)。 //但是在执行“请输入你的年龄”时,第一行虽然我在case(1)中的那个语句之前创建了bufferedreader对象。我希望编译器应该等待用户输入,但它会打印语句。虽然我在尝试之前创建了ageInput。

这太模糊了。

答案 2 :(得分:0)

回答#1:

您要求在第2行之后输入用户输入,即在打印声明之后,因此在询问问题后等待。如果在print语句之前移动语句userInput = ageInput.readLine();(保持缓冲读者在第1行的实例化),那么它将等待用户输入,然后将打印语句。

回答#2:

您可以使用字符串&{39} method,如下所示:

trim()

如果您需要用户定义的功能(我会避免),您可以执行以下操作:

userInput = ageInput.readLine().trim();