循环自动跳过我的type = input.nextInt()部分

时间:2014-12-08 05:13:30

标签: java eclipse loops

我正在研究java的最终项目,我需要创建一个项目来获取有关贷款的大量详细信息。然后我应该在一个数组中放入5个贷款然后获取详细信息然后显示所有细节但由于某种原因在我的循环中自动给出无效的类型错误。错误是这样的:

请输入主要利率

30

请输入贷款类型。

选择商务或个人。如果您没有输入,则会收到错误。

您输入了无效的类型。请重新启动,然后重试。

CreateLoan.java

package Construction;

import java.util.Scanner;
import Construction.Loan;


//Gotta fix an issue where it automatically gives an invalid loan type.
public class CreateLoan {

    public static void main(String[] args) {
        int x = 0;
        int primeRate;
        String type;
        Scanner input = new Scanner(System.in);
        Loan[] loans = new Loan[5];
        System.out.println("Please enter the prime interest rate");
        primeRate = input.nextInt();
        primeRate = primeRate/100;

        for(x = 0; x < 6; ++x) {
            System.out.println("Please enter a loan type. Choose either Business or Personal. If you don't type it like that you'll get an error.");
            type = input.nextLine();
            if (type.equalsIgnoreCase("Business")) {
                System.out.println("What is the account number on the loan?");
                int ln = input.nextInt();
                System.out.println("What is the last name on the account?");
                String last = input.nextLine();
                System.out.println("What is the loan amount? If you put more then 100k it'll only accept up to 100k");
                int la = input.nextInt();
                System.out.println("What is the term on the account? If you enter something other then 1, 3, or 5 it will default to a short term.");
                int term = input.nextInt();
                loans[x] = new BusinessLoan(ln, last, la, term);
            }
            else if (type.equalsIgnoreCase("Personal")) {
                System.out.println("What is the account number on the loan?");
                int ln = input.nextInt();
                System.out.println("What is the last name on the account?");
                String last = input.nextLine();
                System.out.println("What is the loan amount? If you put more then 100k it'll only accept up to 100k");
                int la = input.nextInt();
                System.out.println("What is the term on the account? If you enter something other then 1, 3, or 5 it will default to a short term.");
                int term = input.nextInt();
                loans[x] = new PersonalLoan(ln, last, la, term);
            } else {
                System.out.println("You've entered an invalid type. Please restart and try again.");
                System.exit(0);
            }
            Loan.displayAll();
        }
    }
}

Loan.java

package Construction;

public class Loan implements LoanConstant{
    public static int loanNumber;
    public static String lastName;
    public static int loanAmount;
    public static int interestRate;
    public static int term;
    public int primeRate;

    public int getLoanNumber() { return loanNumber; }
    public void setLoanNumber(int n) { n = loanNumber; }

    public String getLastName() { return lastName; }
    public void setLastName(String s) { s = lastName; }

    public int getLoanAmount() { return loanAmount; }
    public void setLoanAmount(int n) {
        n = loanAmount; 
        if (loanAmount > MAX_LOAN_AMOUNT)
            loanAmount = MAX_LOAN_AMOUNT;
        }

    public int getTerm() { return term; }
    public void setTerm(int n) { 
        n = term; 
        if (term == 1) {
            term = SHORT_TERM;
        } else if (term == 3) {
            term = MEDIUM_TERM;
        } else if(term == 5) {
            term = LONG_TERM;
        } else
            term = SHORT_TERM;
    }

    public int getInterestRate() { return interestRate; }
    public void setInterestRate(int i) { i = interestRate; }

    public Loan(int ln, String last, int la, int term) {
        setLoanNumber(ln);
        setLastName(last);
        setLoanAmount(la);
        setTerm(term);
    }

    public static void displayAll() {
        System.out.println("The Company's Name is " + COMPANY_NAME);
        System.out.println("The loan number is " + loanNumber);
        System.out.println("The last name on the loan is " + lastName);
        System.out.println("The loan amount is " + loanAmount);
        System.out.println("The interest rate on the loan is " + interestRate);
        System.out.println("The term on the account is " + term);
    }
}

PersonalLoan.java

package Construction;

public class PersonalLoan extends Loan{

    public PersonalLoan(int ln, String last, int la, int term) {
        super(ln, last, la, term);
        interestRate = (int)((primeRate * 0.02) + primeRate);
        setInterestRate(interestRate);
    }
}

BusinessLoan.java

package Construction;

public class BusinessLoan extends Loan{

    public BusinessLoan(int ln, String last, int la, int term) {
        super(ln, last, la, term);
        interestRate = (int)((primeRate * 0.01) + primeRate);
        setInterestRate(interestRate);
    }

}

2 个答案:

答案 0 :(得分:1)

将您的行更新为:

    type = input.next();

答案 1 :(得分:0)

当输入优惠贷款时,您在输入贷款后按Enter键,此输入会在缓冲区中添加换行符。 nextint将为您的主要兴趣提供下一个int,然后当您使用readLine读取readline方法读取的行时,直到您按下Enter键时插入缓冲区的换行符,这就是为什么它会自动给出无效类型。 要解决这个问题:

 Scanner input = new Scanner(System.in);            
    System.out.println("Please enter the prime interest rate");
      primeRate = input.nextInt(); 
      primeRate = primeRate/100; 
      type=input.nextLine();  //clears the buffer
      for(x = 0; x < 6; ++x)
      { 
            System.out.println("Please enter a loan type. Choose either Business or Personal. If you don't type it like that you'll get an error."); 
  type = input.nextLine();