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

질문과 관련이 없지만 자바에서는 함수의 첫 번째 줄에 모든 변수를 선언 할 필요가 없습니다. 일반적으로 변수를 가능한 가장 가깝게 선언하는 것이 더 나은 방법입니다. [코드에서'main()'의'tax' 또는'cost' 변수에 대한 예 : – amit

답변

2

두 파일을 모두 컴파일하지 않는 것이 문제입니다.

변경 javac PizzaOrder.javajavac PizzaOrder.java Pizza.java

편집 수 :

이 프로그램을 실행하려면, pizza라는 디렉토리에 PizzaOrder.classPizza.class을 넣어. pizza의 상위 디렉토리에서 java pizza.PizzaOrder을 실행하십시오.

+0

시도한 파일과 클래스 파일이 만들어집니다. 그러나 코드를 실행하는 방법? –

+0

실행하면 오류가 발생합니다. 나는 이것을 내 질문에 더한다. 그것을보십시오. –

+0

감사합니다. 이것은 나를 위해 일했다. –

0

는 Pizza.java 및 PizzaOrder.java 그러므로라는 이름의 폴더 피자에 있어야합니다, 패키지 피자에 있습니다. 두 파일을 함께 컴파일하지 않는 경우 컴파일러가 PizzaOrder.java를 컴파일 할 때 pizza/Pizza.class를 찾을 수 있도록 클래스 경로를 설정해야합니다.

가 UPDATE :

이의 현재 디렉토리는 C 가정 해 봅시다 : 사용자 (BTW, 왜 당신은 당신의 프로젝트를 컴파일 넷빈즈를 사용하지 않는) 넷빈즈 프로젝트 \ Meutex \ 문서 \, 그리고 피자 디렉토리가 그 안에 \ 명령은 다음과 같습니다.

+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.class 및 PizzaOrder.class 파일이 두 개 더 있지만이 코드를 실행하는 방법은 무엇입니까? –

+0

KarlP -이 코드를 어떻게 실행 했습니까? –

+0

Eclipse를 사용했습니다. 그러나 실행 파일'java'를 사용하여 클래스를 시작할 수 있습니다. 'pizza' 폴더가있는 폴더에서'java pizza.PizzaOrder'를 실행하십시오. – KarlP

1

패키지 피자에서 클래스를 선언하면 모든 컴파일 클래스 파일이 폴더 피자 안에 있어야합니다. 이를 위해 다음을 수행하십시오.

  1. 파일을 디렉토리에 보관하십시오 (예 : Project).
  2. 명령 줄에서 Project 폴더로 이동하십시오.
  3. Project 폴더 안에 build 폴더를 만듭니다.
  4. 모든 .java 파일을 Project 폴더에 복사하십시오.
  5. 명령 줄에서 -d 옵션을 사용하여 코드를 컴파일하십시오. 즉 실행 javac -d build *.java 폴더 안에 다른 폴더 pizza이 생성됩니다.
  6. 응용 프로그램을 실행하려면 cd build을 실행하십시오.
  7. 을 입력 클래스는 단순히 확장 javac Pizza.java와 프로그램 이름으로 컴파일 할 수없는 패키지가있는 경우 java pizza.PizzaOrder
-1

. 패키지의 특정 클래스를 저장하기위한 디렉토리를 만들어야합니다. javac -d . Pizza.java 명령을 사용하여 컴파일해야합니다. 여기서 .은 현재 디렉토리에 패키지 폴더를 생성합니다. 다른 위치에 폴더를 만들려면 javac -d e:\user Pizza.java

관련 문제