如何在while循环中终止此程序以及为什么错误消息在用户输入之前打印出来?

时间:2013-11-21 19:23:18

标签: java while-loop

我正在做一项任务,我有两个问题。感谢您提供任何帮助!

我的第一个问题是用用户输入终止程序。我已经让程序循环不正确的数据,但我不知道在哪里放置一个while循环,以便“完成”将在任何地方终止程序。

我的第二个问题是我无法弄清楚为什么程序跳过年薪输入并打印错误信息:

输出示例:

  

姓氏:[Jean]

     

名字:[Martha]

     

年薪:[跳过]

     

错误:请输入一个数字

     

年薪:[允许输入]

以下是我正在处理的代码部分:

import java.util.Scanner;
public class BaseSalary
{  

  public static Scanner keyboard = new Scanner(System.in);

  public static void main(String[] args)
  {

    String tempBaseSalary=null;
    String salespersonName=null;
    Double baseSalary=0.0;
    String end = "Done";

//tried putting while(salespersonName.equals(end))  here allow user to terminate

      salespersonName = getSalespersonName();


//tried while(!tempBaseSalary.equals(end)) in same manner

      tempBaseSalary = getBaseSalary();       //get baseSalary

      while(!isNumeric(tempBaseSalary))       // loop until tempBaseSalary is a number
      {

        System.out.println("Error: Please enter a number");       //Why is printing out before user input??
        tempBaseSalary=getBaseSalary();
      }   

      baseSalary=Double.parseDouble(tempBaseSalary);  //convert for future calculations
      System.out.println("Saleserson name:" + salespersonName);   
      System.out.println("Base Salary:" + baseSalary);
  }

  public static String getSalespersonName()           //method gets SalespersonName
  {

    String lastName, firstName;

    System.out.println("Last name:");
    lastName=keyboard.next();

    System.out.println("First name:");
    firstName=keyboard.next();

    return (firstName + " " + lastName);

  }


  public static String getBaseSalary()           // method gets baseSalary
  {
    String salary=null;

    System.out.println("annual salary:");  
    salary=keyboard.nextLine();
    return salary;

  }

  public static boolean isNumeric(String number)  //method tests if BaseSalary is a #
  {

    if(number.matches("\\d+(\\.\\d+)?"))
    {
      return true;
    }
    else{
      return false;
    }
  }
}

顺便说一句,我目前正在使用Java博士。再次,谢谢你提前帮助!如果您需要任何其他信息或说明,请与我们联系。

5 个答案:

答案 0 :(得分:0)

制作两个字符串数组(或您自己的对象数组,或二维字符串数组);一个数组保存提示,另一个数组填充响应。循环遍历数组,输出提示,获取输入。如果输入是“完成”,则终止循环,否则将其放入数组中与提示数组中的提示相同的位置。

或者你可以拥有自己的类来保存提示和响应提示,并有一组数组。

我会留给你弄清楚如何使用二维数组。

答案 1 :(得分:0)

next()中使用nextLine()代替getBaseSalary()。应该解决你的第二个问题。

答案 2 :(得分:0)

您可以使用System.exit(0);完成该应用 你可以像我那样做一个循环

int i , integer1
while(i<10){
    codes... + an integer1++
}
if (integer1>10){
    System.exit(0);
}
else{
//don't do anything
}

答案 3 :(得分:0)

您应该在salary = keyboard.next()方法中使用getBaseSalary()来解决第二个问题。

public static String getBaseSalary() // method gets baseSalary
    {
        String salary = null;

        System.out.println("annual salary:");
        salary = keyboard.next();
        return salary;

    }

答案 4 :(得分:0)

回答你的第二个问题: 当您输入第二个名称时,从控制台输入姓氏后您点击的\n中的缓冲区仍然包含enter。因此,默认情况下,您的年薪会读取\n的剩余部分,因此会失败。 建议:在名字和名字中使用.nextLine(),如

System.out.println("Last name:");
lastName=keyboard.nextLine();

System.out.println("First name:");
firstName=keyboard.nextLine();

关于第一个问题,首先需要确定您期望的done条目,即firstName或lastName。找到后,您可以将条目与变量end进行比较。假设您想在firstName的输入为done时终止,那么您将执行

if(end.equalsIgnoreCase(firstName))
  System.exit(0);

您将在收到用户对该变量的输入后执行此比较并退出系统。在这种情况下,这将在您收到firstName的用户条目后完成。