2014-10-16 6 views
0

Я пытаюсь сделать состояние, в которомЛогическая/Семантическая ошибка

  1. Если номер счета составляет менее 1000, вынудит номер счета на 0.
  2. Если поле месяца меньше, чем 1 или больше 12, заставьте поле месяца равным 0.
  3. Если поле дня меньше 1 или больше 31, заставьте поле дня равным 0.
  4. Если поле года меньше 2011 года или больше, чем 2017, установите поле года на 0.

, но когда я пытаюсь запустить его, он заставляет все поля на 0, даже когда я ставлю правильное значение переменной:

Please type your invoice number: ...1111 
What month is the balance due?(Choose from 1-12)... 1 
What day is the balance due?(Choose from 1-31).... 12 
What year is the balance due? (Choose from 2011-2017) ....2011 
Your invoice number is 0 and your balance due is on 0/0/0. 
public class Invoice 
{ 
    private int  inNum; 
    private double balDue; 
    private int  m; 
    private int  d; 
    private int  yy; 

    public Invoice() 
    { 
     super(); 
     setInNum(inNum); 
     getInNum(); 
     setBalDue(balDue); 
     setM(m); 
     setD(d); 
     setYy(yy); 

    } 

    public int getInNum() 
    { 
     return inNum; 
    } 

    public void setInNum (int inNum) 
    { 
     if (inNum < 1000) 
      this.inNum = 0; 
     else 
      this.inNum = inNum; 
    } 

    public double getBalDue() 
    { 
     return balDue; 
    } 

    public void setBalDue (double balDue) 
    { 
     this.balDue = balDue; 
    } 

    public int getM() 
    { 
     return m; 
    } 

    public void setM (int m) 
    { 
     if (m < 1 || m > 12) 
      this.m = 0; 
     else 
      this.m = m; 
    } 

    public int getD() 
    { 
     return d; 
    } 

    public void setD (int d) 
    { 
     if (d < 1 || d > 31) 
      this.d = 0; 
     else 
      this.d = d; 

    } 

    public int getYy() 
    { 
     return yy; 
    } 

    public void setYy (int yy) 
    { 
     if (yy < 2011 || yy > 2017) 
      this.m = 0; 
     else 
      this.yy = yy; 
    } 

    public void displayInfo() 
    { 
     int inNum; 

     int m, d, yy; 
     Scanner keyboard = new Scanner(System.in); 
     System.out.print("Please type your invoice number: "); 
     inNum = keyboard.nextInt(); 
     System.out 
       .print("What month is the balance due?(Choose from 1-12) "); 
     m = keyboard.nextInt(); 
     System.out 
       .print("What day is the balance due?(Choose from 1-31) "); 
     d = keyboard.nextInt(); 
     System.out 
       .print("What year is the balance due? (Choose from 2011-2017) "); 
     yy = keyboard.nextInt(); 

     System.out.println("Your invoice number is " + getInNum() 
       + " and your balance due is on " + getM() + "/" + getD() 
       + "/" + getYy() + "."); 

    } 

    public static void main (String[] args) 
    { 
     Invoice invoice = new Invoice(); 
     invoice.displayInfo(); 
    } 

} 

ответ

1

Вы сделали все эти клевые сеттеры для класса и Бесполезный Не используйте их!

Scanner keyboard = new Scanner(System.in); 
System.out.print("Please type your invoice number: "); 
setInNum(keyboard.nextInt()); 
System.out.print("What month is the balance due?(Choose from 1-12) "); 
setM(keyboard.nextInt()); 
System.out.print("What day is the balance due?(Choose from 1-31) "); 
setD(keyboard.nextInt()); 
System.out.print("What year is the balance due? (Choose from 2011-2017) "); 
setY(keyboard.nextInt()); 

System.out.println("Your invoice number is " + getInNum() + " and your balance due is on " + getM() + "/" + getD() + "/" + getYy() + "."); 
+0

Спасибо, что сработало! – Chrissy

2

Это не удается, потому что ваш призыв к displayInfo происходит ПОСЛЕ вашего вызова всех сеттеров. Это должно произойти первым, иначе сеттерам нечего делать.

Я думаю, что ошибочно назвать эти методы setter в конструкторе. Вам нужно позвонить каждому, когда у вас есть значение, которое необходимо передать ему.

Таким образом, вы могли бы иметь локальную переменную для каждого значения, которое вы вводите, которые вы затем перейти к сеттер

int invoiceNumber = keyboard.nextInt(); 
setInNumber(invoiceNumber); 

и так далее для всех остальных полей.

Смежные вопросы