programa en java

ninguno
04 de Junio del 2009
tengo este programa:

import java.util.Scanner;

class Articulo{
int noParte;
String descripcion;
double precio;
}

class Catalogo{
Articulo[] articulos = new Articulo[1000];
}

class Venta{
String fecha;
String tipoDePago;
Double precio;
int noParte;
String descripcion;
Articulo[] articulos = new Articulo[1000];
}

public class EjemploProcedimientos {

public static void main(String[] args) {

int opcion = 0;
Scanner nums = new Scanner(System.in);
Scanner txt = new Scanner(System.in);
Catalogo catalogo = new Catalogo();
Venta venta = new Venta();
while(true){

limpiarPantalla();
desplegarMenu();

//Capturamos el numero de la opcion
opcion = nums.nextInt();
//Con un switch vamos a evaluar la opcion que el
//usuario haya tecleado

switch(opcion){
case 1:
//Mostramos el menu del catalogo
//el cual se divide en 2, ver catalogo
//y capturar articulos
mostrarMenuCatalogo();
//Utilizamos la misma variable opcion
//para las opciones del menu de catalogos
opcion = nums.nextInt();
//Utilizamos otro switch para el menu de los
//catalogos
switch(opcion){
case 1:
verCatalogo(catalogo);
break;
case 2:
capturarArticulos(catalogo);
break;
default:
//Dejamos la opcion en cero
//para que continue el switch
opcion = 0;
}
break;
case 2:
Venta(catalogo,venta);
break;
case 3:
break;
case 4:
System.exit(0);
default:
System.out.println("Opcion no válida");
System.out.println(
"Presione ENTER para continuar...");
txt.nextLine();
}
}
}


//Los procedimientos y funciones se definen
//fuera del metodo main!!!

//Procedimiento para simular que limpiamos la
//pantalla
public static void limpiarPantalla(){
for(int i=0; i<80; i++){
System.out.println();
}
}
//Procedimiento para desplegar un menu
public static void desplegarMenu(){
System.out.println("--- EL CHELAS ---nnn");
System.out.println("1. Catalogo de Productos");
System.out.println("2. Crear venta");
System.out.println("3. Corte de caja");
System.out.println("4. Salir del programann");
System.out.print("Seleccione un opcion...: ");
}

public static void mostrarMenuCatalogo(){
limpiarPantalla();
System.out.println("--- CATALOGO DE PRODUCTOS ---nnn");
System.out.println("1. Ver Catalogo de Productos");
System.out.println("2. Capturar artículosnn");
System.out.print("Seleccione un opcion...: ");
}

public static void verCatalogo(Catalogo catalogo){
limpiarPantalla();
System.out.println("CATALOGO DE ARTICULOSnn");
System.out.println("No. Parte ttDescripción ttPrecio");
System.out.println("----------tt--------------tt--------");
for(int i=0; i<catalogo.articulos.length; i++){
if(catalogo.articulos[i] != null){
//El procedimiento printf nos permite darle formato a la salida
//de texto, ejemplo: %9d significa darle 9 espacios a un dato numérico
//en este caso el numero de parte, el segundo %20s darle 20 espacios
//a un tipo string, es este caso la descripcion, y por ultimo
//%8.2f significa dale 8 espacios con 2 decimales a un numero de punto
//flotante, en este caso el precio
System.out.printf("%9d %20s $%8.2f",catalogo.articulos[i].noParte,
catalogo.articulos[i].descripcion,
catalogo.articulos[i].precio);
System.out.println();
}
}
System.out.println("nPresione ENTER para continuar..");
Scanner txt = new Scanner(System.in);
txt.nextLine();
}

public static void capturarArticulos(Catalogo catalogo){
while(true){
limpiarPantalla();
System.out.println("Capture el artículonn");
//Creamos el articulo que vamos a guardar dentro el
//catalogo
Articulo a = new Articulo();
//Creamos un scanner para capturar los numeros
//y el texto
Scanner nums = new Scanner(System.in);
Scanner txt = new Scanner(System.in);
//Capturamos los datos
System.out.print("No de parte..: ");
a.noParte = nums.nextInt();
System.out.print("Descripción..: ");
a.descripcion = txt.nextLine();
System.out.print("Precio.......: ");
a.precio = nums.nextDouble();
//Ya que tenemos el articulo creado, con sus valores
//establecidos, tenemos que guardar ese articulo dentro del
//catalogo.
//El catalogo contien un arreglo de articulos, este
//arreglo al momento de su creacion, establece como
//valor inicial de sus elementos el valor null, por
//lo tanto donde encontremos un valor null, podemos
//guardar en ese elemento el articulo que creamos
for(int i=0; i<catalogo.articulos.length; i++){
if(catalogo.articulos[i] == null){
catalogo.articulos[i] = a;
break;
}
}
System.out.print(
"nnArtículo Registrado...¿Desea Continuar? (s/n): ");
String continuar = txt.nextLine();
if(continuar.equals("n")){
break;
}
}
}
/*la variable catalogo (en minusculas) toma las propiedades de la clase Catalogo, para poder
utilizarla, igual con la variable ventas(minusculas) toma las propiedades de la clase Ventas
para utilizarla con mayor facilidad*/
public static void Venta(Catalogo catalogo,Venta venta){
int num=0;
Scanner nums = new Scanner(System.in);
Scanner txt = new Scanner(System.in);
String continuar ="s";
Articulo a = new Articulo();

while(continuar.equals =("si")){
System.out.print("Ingrese el numero de parte del articulo..: ");
num = nums.nextInt();
int j=0;
for(int i=0; i<catalogo.articulos.length; i++){
if(catalogo.articulos[i].noParte == num){
if(venta.articulos[j] == null){
catalogo.articulos[j] = a;
}
break;
}
}
System.out.print("¿Deseas continuar introduciendo articulos? (s/n)");
continuar = txt.nextLine();

}
}
}

necesito introducir el numero de parte, y en ese momento buscar en el arreglo catalogo si se encuentra, si si meterlo en otro arreglo llamado venta, sino que me diga "numero de parte incorrecto" y que regrese para introducir otro numero de parte, me sale este error y no se el por que ayudenme porfa!!

Exception in thread "main" java.lang.NullPointerException
at EjemploProcedimientos2.Venta(EjemploProcedimientos2.java:186)
at EjemploProcedimientos2.main(EjemploProcedimientos2.java:64)
gracias