2011-10-23 2 views
0

Ниже приведен тестовый код, где я получаю сообщение об ошибке Pizza order = new Pizza(); Я считаю, что я не импортировал Pizza.class в файл Pizzaorder.class. Может кто-нибудь помочь мне в исправлении этой ошибки.Импорт пользовательского класса в java

Код следует.

Pizza.java

package pizza; 
public class Pizza { 
     private double cost; //the cost of the pizza 
    private String crust; //the type of crust 
    private int size; //the diameter in inches 
    private int numToppings; //the number of toppings 
    private String toppingList; //a list of the toppings 
    public static void main(String[] args) { 
    } 
    public Pizza() 
    { 
     cost = 12.99; 
     crust = "Hand-tossed"; 
     size = 12; 
     numToppings = 0; 
     toppingList = null; 
    } 
    public void setCost (double amount) 
     { 
      cost += amount; 
     } 
    public void setCrust (String type) 
    { 
     crust = type; 
    } 
    public void setSize (int diameter) 
    { 
     size = diameter; 
    } 
    public void setNumToppings(int number) 
    { 
     numToppings = number; 
    } 
    public void setToppingList (String newTopping) 
    { 
     toppingList = newTopping; 
    } 
    public double getCost() 
    { 
     return cost; 
    } 
    public String getCrust() 
    { 
     return crust; 
    } 
    public int getSize() 
    { 
     return size; 
    } 
    public int getNumToppings() 
    { 
     return numToppings; 
    } 
    public String getToppingList() 
    { 
     return toppingList; 
    } 
} 

PizzaOrder.java

package pizza; 
import java.util.Scanner; 
public class PizzaOrder { 
    public static void main (String [] args) 
    { 
       Scanner keyboard = new Scanner (System.in); 
       Pizza order = new Pizza(); 
       String firstName; 
     boolean discount = false; 
       int inches; 
     char crustType; 
     double cost; 
     final double TAX_RATE = .08; 
     double tax; 
     char choice; 
     String input; 
     String toppings = "Cheese "; 
     int numberOfToppings = 0; 
     System.out.println("Welcome to Abdul and " + 
     "Diane’s Pizza"); 
     System.out.print("Enter your first name: "); 
     firstName = keyboard.nextLine(); 
     System.out.println("Pizza Size (inches)  Cost"); 
     System.out.println("  10   £10.99"); 
     System.out.println("  12   £12.99"); 
     System.out.println("  14   £14.99"); 
     System.out.println("  16   £16.99"); 
     System.out.println("What size pizza would you like?"); 
     System.out.print("10, 12, 14, or 16 " + "(enter the number only): "); 
     inches = keyboard.nextInt(); 
     keyboard.nextLine(); 
     System.out.println("What type of crust do you want? "); 
     System.out.print(
     "(H)Hand-tossed, (T) Thin-crust, or " + 
     "(D) Deep-dish (enter H, T, or D): "); 
     input = keyboard.nextLine(); 
     crustType = input.charAt(0); 
       System.out.println("All pizzas come with cheese."); 
     System.out.println(
     "Additional toppings are £1.25 each," 
     + " choose from"); 
     System.out.println(
     "Pepperoni, Sausage, Onion, Mushroom"); 
     System.out.print("Do you want Pepperoni? (Y/N): "); 
     input = keyboard.nextLine(); 
     choice = input.charAt(0); 
     if (choice == 'Y' || choice == 'y') 
     { 
      numberOfToppings += 1; 
      toppings = toppings + "Pepperoni "; 
     } 
     System.out.print("Do you want Sausage? (Y/N): "); 
     input = keyboard.nextLine(); 

     choice = input.charAt(0); 
     if (choice == 'Y' || choice == 'y') 
     { 
      numberOfToppings += 1; 
      toppings = toppings + "Sausage "; 
     } 
     System.out.print("Do you want Onion? (Y/N): "); 
     input = keyboard.nextLine(); 

     choice = input.charAt(0); 
     if (choice == 'Y' || choice == 'y') 
     { 
      numberOfToppings += 1; 
      toppings = toppings + "Onion "; 
     } 
     System.out.print("Do you want Mushroom? (Y/N): "); 
     input = keyboard.nextLine(); 
     choice = input.charAt(0); 
     if (choice == 'Y' || choice == 'y') 
     { 
      numberOfToppings += 1; 
      toppings = toppings + "Mushroom "; 
     } 
     order.setNumToppings (numberOfToppings); 
     order.setToppingList(toppings); 
     order.setCost(1.25*numberOfToppings); 
     System.out.println(); 
     System.out.println("Your order is as follows: "); 
     System.out.println(order.getSize() + " inch pizza"); 
     System.out.println(order.getCrust() + " crust"); 
     System.out.println(order.getToppingList()); 
     cost = order.getCost(); 
       System.out.println("The cost of your order is: £" + 
     cost); 
     tax = cost * TAX_RATE; 
     System.out.println("The tax is: £" + tax); 
     System.out.println("The total due is: £" + 
     (tax+cost)); 
     System.out.println("Your order will be ready" + 
     " for pickup in 30 minutes."); 
    } 
} 

Ошибка:

C:\Users\Meutex\Documents\Netbeans projects>javac PizzaOrder.java 
PizzaOrder.java:23: error: cannot find symbo 

Дополнительная погрешность.

C:\Users\Meutex\Documents\Netbeans projects\Pizza>java Pizza.PizzaOrder 
Exception in thread "main" java.lang.NoClassDefFoundError: Pizza/PizzaOrder (wro 
ng name: pizza/PizzaOrder) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14 
2) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:472) 
+2

Почему, по вашему мнению, у вас есть такая проблема? Какая у вас ошибка/проблема? – Mat

+0

Я отредактировал мой вопрос, пожалуйста, тщательно изучите его. –

+1

Не связано с вашим вопросом, но в Java вам не нужно объявлять все переменные в первых строках функции. Как правило, лучше всего объявить переменную как можно более близкой к тому, где она впервые используется. [для примеров переменные 'tax' или' cost' в 'main()' в вашем коде] – amit

ответ

2

Проблема в том, что вы не компилируете оба файла.

Изменение javac PizzaOrder.java быть javac PizzaOrder.java Pizza.java

Edit:

Чтобы запустить программу, поставить PizzaOrder.class и Pizza.class в директории под названием pizza. Из родительского каталога pizza запустите java pizza.PizzaOrder.

+0

Созданы файлы проб и файлов. Но как запустить код? –

+0

Забегая, я получаю ошибки. Я добавляю это к своему вопросу. Пожалуйста, посмотри на это. –

+0

Спасибо! это сработало для меня. –

0

Pizza.java и PizzaOrder.java в упаковке пиццы, поэтому они должны быть в папке с именем пиццы. Если вы не компилируете оба файла вместе, путь к классам должен быть установлен таким образом, чтобы компилятор мог найти pizza/Pizza.class при компиляции PizzaOrder.java.

UPDATE:

Допустим, текущий каталог C: \ Users \ Meutex \ Documents \ Projects Netbeans (кстати, почему вы не используете NetBeans для компиляции проекта), и ваш каталог пиццы находится внутри него, то команда будет следующей:

javac -cp . pizza/PizzaOrder.java 
+0

Как скомпилировать с classpath? –

+0

см. Обновленный ответ –

0

Ниже приведены результаты вашей программы: Кажется, что это работает. У вас есть оба класса в одной папке под названием «pizza»?

Welcome to Abdul and Diane’s Pizza 
Enter your first name: K 
Pizza Size (inches)  Cost 
     10   £10.99 
     12   £12.99 
     14   £14.99 
     16   £16.99 
What size pizza would you like? 
10, 12, 14, or 16 (enter the number only): 10 
What type of crust do you want? 
(H)Hand-tossed, (T) Thin-crust, or (D) Deep-dish (enter H, T, or D): T 
All pizzas come with cheese. 
Additional toppings are £1.25 each, choose from 
Pepperoni, Sausage, Onion, Mushroom 
Do you want Pepperoni? (Y/N): Y 
Do you want Sausage? (Y/N): Y 
Do you want Onion? (Y/N): Y 
Do you want Mushroom? (Y/N): Y 

Your order is as follows: 
12 inch pizza 
Hand-tossed crust 
Cheese Pepperoni Sausage Onion Mushroom 
The cost of your order is: £17.990000000000002 
The tax is: £1.4392000000000003 
The total due is: £19.4292 
Your order will be ready for pickup in 30 minutes. 

Есть много соображений по поводу «стилю» вашей программы, как фигурная скобка-размещение, определение переменных в верхней части методов, как в C, и не разделив основной класса на более мелкий методы, но для новичков это нормально.

+0

Ну, я добавляю и файл в папку Pizza, и я скомпилировал оба, и у меня есть еще 2 файла Pizza.class и PizzaOrder.class, но как запустить этот код? –

+0

KarlP - Как вы запустили этот код? –

+0

Я использовал Eclipse. Но можно запустить класс с помощью исполняемого 'java'; В папке, содержащей папку 'pizza', запустите' java pizza.PizzaOrder' – KarlP

1

Когда вы объявили классы в упаковке pizza, все файлы классов компилятора должны войти в папку pizza. Для этого сделайте следующее.

  1. Храните файлы в каталоге, скажем Project.
  2. В командной строке перейдите в папку Project.
  3. Создайте папку build внутри папки Project.
  4. Скопируйте все ваши .java файлы в папку Project.
  5. В командной строке скомпилируйте код с опцией -d. то есть выполнить javac -d build *.java Вы увидите другую папку pizza, созданную внутри папки build.
  6. Чтобы запустить приложение, сделайте cd build.
  7. Тип java pizza.PizzaOrder
-1

Если класс имеет пакет не может быть просто составленную название программы с расширением javac Pizza.java. Каталог должен быть создан для хранения определенных классов в своем пакете. Он должен быть скомпилирован командой javac -d . Pizza.java, где . создаст папку пакета в текущем каталоге. Чтобы создать папку в другом месте, укажите название местоположения, например javac -d e:\user Pizza.java

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