2013-11-09 4 views
-3

Вот мой код:методы и массивы

import java.util.*; 
import java.text.*; 


public class zadanko4 
{ 
    int ile; 

    public static final int vat8 = 8; 
    public static final int vat23 = 23; 
    public static final int vat5 = 5; 

    //deklaracje zmiennych tablicowych 
    static double[] price; 
    static String[] name; 
    static int[] quantity; 
    static int[] vat; 

    //tworzenie tablic 
    price = new double[ile]; 
    name = new String[ile]; 
    quantity = new int[ile]; 
    vat = new int[ile]; 

    public static void printSellerData(String tekst) 
    { 
     System.out.print(tekst); 
    } 

    public static void printBuyerData(String company, String taxNo, String phone, String email) 
    { 
     System.out.print(company + taxNo + phone + email); 
    } 

    public static void printInvoiceDate(Date data) 
    { 

     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
     System.out.print(dateFormat.format(data)); 
    } 

    public static void printInvoiceHeader(String naglowek) 
    { 
     System.out.print(naglowek); 
    } 

    public static void printInvoiceProduct(String name, int quantity, double price, int vat) 
    { 
     System.out.printf(name + quantity + price + vat); 
    } 

    public static void readProductsData() 
    { 
     //uzytkownik wprowadza liczbe produktow 
     System.out.println("podaj liczbe produktow"); 
     Scanner scanner = new Scanner(System. in); 
     ile = scanner.nextInt(); 
    } 

    public static void main(String[] args) 
    { 
     int i; 
     String line; 

     for (i = 0; i < ile; i++) 
     { 
      System.out.print("Podaj cene produktu nr " + (i + 1) + ": "); 
      price[i] = scanner.nextDouble(); 
      System.out.print("Podaj nazwe produktu nr " + (i + 1) + ": "); 
      name[i] = scanner.next(); 
      System.out.print("Podaj ilosc produktu nr " + (i + 1) + ": "); 
      quantity[i] = scanner.nextInt(); 
      System.out.print("Podaj vat produktu nr " + (i + 1) + ": "); 
      vat[i] = scanner.nextInt(); 


      System.out.printf("Dane sprzedajacego\n"); 
      printSellerData("Company: MaxDom Ltd, Kochanowskiego 17, 31-782 Krakow, Poland\n"); 
      printSellerData("Tax no: 677-000-21-39\n"); 
      printSellerData("Phone: +48123454943\n"); 
      printSellerData("Email: [email protected]\n\n"); 

      System.out.printf("Dane kupujacego\n"); 
      printBuyerData("Softpol Ltd, Mickiewicza 5, 31-009 Krakow, Poland\n", "342-909-33-12\n", "+48505392100\n", "[email protected]\n"); 
      // printInvoiceNumber(+numer+); 
      Date data = new Date(); 
      printInvoiceDate(data); 
      printInvoiceHeader("|No.|Product desciptrion |Quantity |Unit price |Total |VAT rate |VAT |Gross|"); 
      printInvoiceHeader("|______________________________________________________________________________________________________|"); 
      //printInvoiceProduct("name[i]", ilosc[prod], cena[prod], vat[prod]"); 
      printInvoiceProduct("|" + (i + 1) + " |" + name[i] + "   |" + quantity[i] + "  |" + price[i] + "  |" + (quantity[i] * price[i]) + " |" + (vat[i]/100.0) + "   |" + (quantity[i] * price[i] * (vat[i]/100.0)) + " |" + (quantity[i] * price[i]) * (1 + (vat[i]/100.0))); 
     } 
    } 
} 

и мои проблемы:

  1. У меня есть 4 ошибки, как: error: <identifier> expected. Он связан с массивами, но я понятия не имею, что не так.

  2. К последней строке: printInvoiceProduct .... Я хочу отобразить 1 продукт, введенный пользователем, но ничего не отображается.

Почему?

+0

хорошее начало было бы правильно форматировать код ... – MightyPork

+4

с указанием ошибок было бы здорово. – Jocke

+0

ile не имеет значения, поэтому создание массива завершится неудачно. но может быть больше этого – MightyPork

ответ

0
  1. Создайте новые адреса памяти для массивов по мере их обращения. Подобно;

    static double[] price = new double[ile];

  2. Это также не достаточно, потому что эти статические массивы пытаются сделать статическую ссылку на нестатический переменный «Ил». Поэтому, если вы хотите, чтобы ваши массивы были статическими, просто сделайте также «ile».

  3. printInvoiceProduct метод объявлен для передачи 4 аргументов, но вы его вызывали только одним объектом String.

+0

спасибо за помощь. Как сделать «ile» статическим? Что-то вроде этого: price = new static double [ile]; ? Я не получаю третью точку. Что вы подразумеваете под одним объектом Стрин? Который из? Мне жаль, я ном. – user2971960

0

Даже если вы решите ошибки компиляции, вы снова столкнетесь с проблемами. Например, вы создаете массив с нулевым размером. Это не удастся. Поэтому вместо создания объектов массива выше; создайте в основной функции, зная размер массива. Так что избавитесь от переменной ile. Возьмите ввод в main, а затем создайте экземпляр всего массива. Даже я не вижу необходимости в уровневых массивах, все могут быть локальными.

Кроме того, я не думаю, что это правильная платформа для решения такой проблемы. Рассмотрим положить вашу проблему на

https://codereview.stackexchange.com/

+0

не очень. Я не вставлял весь код, но у меня есть что-то вроде: \t \t System.out.println («ввести количество продуктов»); \t \t Сканер сканер = новый сканер (System.в); \t \t ile = scanner.nextInt(); И все это делает размер массива – user2971960

+0

Это не поможет, потому что значение ile будет учтено во время создания массива, который вы делаете на уровне класса. –

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