2015-12-03 12 views
-3

Я не могу понять, куда идти с моим кодом, также в моем цикле if он не позволяет мне вводить больше имен компаний после первого цикла.Нужна помощь в создании программы счета-фактуры с использованием массивов

Assign4:

import java.util.Scanner; 

public class Assign4 { 

    private static int invoice; 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     OurDate date = new OurDate(); 
     Invoice inv = new Invoice(); 
     Ledger led = new Ledger(); 

     System.out.print("Enter the amount of monthly invoices: "); 
     invoice = scan.nextInt(); 

     for(int i = 0; i < invoice; i++){ 

      System.out.println("\nEnter info for invoice number " + i); 
      inv.setCompanyNameFromUser(); 
      inv.toString(); 
      inv.setBillAmountFromUser(); 
      inv.setDateFromUser(); 
      date.setDayFromUser(); 
      date.setMonthFromUser(); 
      date.setYearFromUser(); 
     } 
    } 
} 

OurDate:

import java.util.Scanner; 

public class OurDate { 

    private int day; 
    private int month; 
    private int year; 
    Scanner scan = new Scanner(System.in); 

    public OurDate(){ 
     day = 0; 
     month = 0; 
     year = 1900; 
    } 
    public void setDayFromUser(){ 
     System.out.print("Enter day : "); 
     day = scan.nextInt(); 
    } 
    public void setMonthFromUser(){ 
     System.out.print("Enter month : "); 
     month = scan.nextInt(); 
    } 
    public void setYearFromUser(){ 
     System.out.print("Enter year : "); 
     year = scan.nextInt(); 
    } 
    public String toString(){ 
     return null; 

    } 
} 

Счет:

import java.util.Scanner; 

public class Invoice { 

    private double billAmount; 
    private String name; 
    private OurDate dueDate; 
    Scanner scan = new Scanner(System.in); 

    public Invoice(){ 
     billAmount = 0; 
    } 
    public void setDateFromUser(){ 
     System.out.print("Enter invoice due date\n"); 
     //dueDate = scan.nextInt(); 
    } 
    public void setCompanyNameFromUser(){ 
     System.out.print("Enter the company name : "); 
     name = scan.nextLine(); 
    } 
    public void setBillAmountFromUser(){ 
     System.out.print("Enter bill amount : "); 
     billAmount = scan.nextDouble(); 
    } 
    public String toString(){ 
     return name; 

    } 

} 

Леджер:

import java.util.Scanner; 

public class Ledger { 

    private Invoice [] invoices; 
    private int numInvoices; 
    Scanner scan = new Scanner(System.in); 

    public Ledger(){ 

    } 
    /*public Ledger(int){ 

    }*/ 
    public void getInvoiceInfo(){ 
     System.out.println("Enter info for the invoice number 0\n"); 
    } 
    public void printInvoiceInfo(){ 

    } 
    public double calculateMonthBills(){ 
     return numInvoices; 

    } 
} 
+4

Что такое «if loop»? –

+0

Возможно, случай http://stackoverflow.com/questions/13102045/skipping-nextline-after-using-next-nextint-or-other-nextfoo-methods –

+1

Вы должны объяснить, на каком конкретном этапе ваш код не работает. Затем вы должны подробно описать, как вы попытались исправить эту проблему. Затем вы должны описать, что не работает над этим решением. Затем вы должны задать конкретный и ответный вопрос. – csmckelvey

ответ

1

Поскольку Манос Николаидис упомянул указанную ссылку, вам нужно вызвать #nextLine(), чтобы пропустить \ n после #readInt() в объекте Scanner, содержащемся в объекте Invoice.

Приведенный ниже модифицированный код должен исправить вашу проблему.

import java.util.Scanner; 

public class Assign4 { 

    private static int invoice; 

    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     OurDate date = new OurDate(); 
     Invoice inv = new Invoice(); 
     Ledger led = new Ledger(); 

     System.out.print("Enter the amount of monthly invoices: "); 
     invoice = scan.nextInt(); 

     for(int i = 0; i < invoice; i++) { 

      System.out.println("\nEnter info for invoice number " + i); 
      inv.setCompanyNameFromUser(); 
      inv.toString(); 
      inv.setBillAmountFromUser(); 
      inv.setDateFromUser(); 
      date.setDayFromUser(); 
      date.setMonthFromUser(); 
      date.setYearFromUser(); 
      inv.scan.nextLine(); // Need this line so \n is skipped 
     } 
    } 
}