Java - Ayuda Urgente MergeSort

 
Vista:

Ayuda Urgente MergeSort

Publicado por ecaracciolos (1 intervención) el 18/05/2010 08:49:56
Amigos, necesito presentar mañana 19-05-2010 el codigo mergesort en la universidad pero resulta que me arroja el siguiente error al momento de ingresar el numero en el subindice 0, por favor el que me pueda ayudar mandar un correo en forma urgente a [email protected] , error es el siguiente: Exception in thread "main" java.lang.NullPointerException at MergeSort.main(MergeSort.java:16)

Este es el codigo

import java.io.*;
public class MergeSort {
private static int[] arrayEntrada;

public static void main(String args[]) throws IOException{

BufferedReader bf;
bf =new BufferedReader(new InputStreamReader(System.in));
int subindice = 0;

System.out.println("Cuantos valores desea ingresar: ");
subindice=Integer.parseInt(bf.readLine());

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

System.out.println("Ingrese valor para la Subindice " + i + ": ");
arrayEntrada[i]=Integer.parseInt(bf.readLine());
}

mergeSort(arrayEntrada); //llamada al metodo mergeSort
System.out.println("Este es el ordenamiento de los numeros");
for (int i=0;i < arrayEntrada.length;i++){
System.out.println(arrayEntrada[i]+" ");
}
}
public static void mergeSort( int a[ ]){
int tmpArray[] = new int[ a.length ];

mergeSort( a, tmpArray, 0, a.length - 1 );
}
private static void mergeSort( int a[ ], int tmpArray[],int left, int right ){
if( left < right )
{
int center = ( left + right ) / 2;
mergeSort( a, tmpArray, left, center );
mergeSort( a, tmpArray, center + 1, right );
merge( a, tmpArray, left, center + 1, right );
}
}

private static void merge( int a[ ],int tmpArray[],int leftPos, int rightPos, int rightEnd){
int leftEnd = rightPos - 1;
int tmpPos = leftPos;
int numElements = rightEnd - leftPos + 1;


while( leftPos <= leftEnd && rightPos <= rightEnd ){
if( a[ leftPos ]<( a[ rightPos ] ) ){
tmpArray[ tmpPos++ ] = a[ leftPos++ ];
}
else{
tmpArray[ tmpPos++ ] = a[ rightPos++ ];
}
}
while( leftPos <= leftEnd ){f
tmpArray[ tmpPos++ ] = a[ leftPos++ ];
}
while( rightPos <= rightEnd ){
tmpArray[ tmpPos++ ] = a[ rightPos++ ];
}

for( int i = 0; i < numElements; i++, rightEnd-- ){
a[ rightEnd ] = tmpArray[ rightEnd ];
}
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda Urgente MergeSort

Publicado por Tom (1831 intervenciones) el 18/05/2010 12:57:14
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/arrays.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda Urgente MergeSort

Publicado por aitor (85 intervenciones) el 18/05/2010 21:33:41
tre falto inicializar arrayEtrada en este ejemplo te e cambiado por la clase vector que es de tamaño dinamico



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Vector;

/**
*
* @author Aitor
*/
public class MergeSort {

private static Vector arrayEntrada=new Vector(); //faltava inicializar

public static void main(String args[]) throws IOException {

BufferedReader bf;
bf = new BufferedReader(new InputStreamReader(System.in));
int subindice = 0;

System.out.println("Cuantos valores desea ingresar: ");
subindice = Integer.parseInt(bf.readLine());

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

System.out.println("Ingrese valor para la Subindice " + i + ": ");
arrayEntrada.add(Integer.parseInt(bf.readLine()));
}

mergeSort(arrayEntrada); //llamada al metodo mergeSort
System.out.println("Este es el ordenamiento de los numeros");
for (int i = 0; i < arrayEntrada.size(); i++) {
System.out.println(arrayEntrada.elementAt(i));
}
}

public static void mergeSort(Vector a) {
int tmpArray[] = new int[a.size()];

mergeSort(a, tmpArray, 0, a.size() - 1);
}

private static void mergeSort(Vector a, int tmpArray[], int left, int right) {
if (left < right) {
int center = (left + right) / 2;
mergeSort(a, tmpArray, left, center);
mergeSort(a, tmpArray, center + 1, right);
merge(a, tmpArray, left, center + 1, right);
}
}

private static void merge(Vector a, int tmpArray[], int leftPos, int rightPos, int rightEnd) {
int leftEnd = rightPos - 1;
int tmpPos = leftPos;
int numElements = rightEnd - leftPos + 1;

while (leftPos <= leftEnd && rightPos <= rightEnd) {

Object l=a.elementAt(leftPos);
Object t=a.elementAt(rightPos);
if (Integer.parseInt(l.toString()) < Integer.parseInt(t.toString())) {
tmpArray[tmpPos++] = Integer.parseInt(a.elementAt(leftPos++).toString());
} else {
tmpArray[tmpPos++] =Integer.parseInt(a.elementAt(rightPos++).toString());
}
}
while (leftPos <= leftEnd) {
tmpArray[tmpPos++] = Integer.parseInt(a.elementAt(leftPos++).toString());
}
while (rightPos <= rightEnd) {
tmpArray[tmpPos++] = Integer.parseInt(a.elementAt(rightPos++).toString());
}

for (int i = 0; i < numElements; i++, rightEnd--) {
a.setElementAt(tmpArray[rightEnd], rightEnd);
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda Urgente MergeSort

Publicado por aitor (85 intervenciones) el 18/05/2010 21:38:11
este es tu ejemplo gastando un int [] arrayEntrada que lo inicializo al numero de elemetos que va a ordenar

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
*
* @author Aitor
*/
public class MergeSort {

private static int[] arrayEntrada;

public static void main(String args[]) throws IOException {

BufferedReader bf;
bf = new BufferedReader(new InputStreamReader(System.in));
int subindice = 0;

System.out.println("Cuantos valores desea ingresar: ");
subindice = Integer.parseInt(bf.readLine());
arrayEntrada=new int[subindice]; // inicializacion!!!

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

System.out.println("Ingrese valor para la Subindice " + i + ": ");
arrayEntrada[i] = Integer.parseInt(bf.readLine());
}

mergeSort(arrayEntrada); //llamada al metodo mergeSort
System.out.println("Este es el ordenamiento de los numeros");
for (int i = 0; i < arrayEntrada.length; i++) {
System.out.println(arrayEntrada[i] + " ");
}
}

public static void mergeSort(int a[]) {
int tmpArray[] = new int[a.length];

mergeSort(a, tmpArray, 0, a.length - 1);
}

private static void mergeSort(int a[], int tmpArray[], int left, int right) {
if (left < right) {
int center = (left + right) / 2;
mergeSort(a, tmpArray, left, center);
mergeSort(a, tmpArray, center + 1, right);
merge(a, tmpArray, left, center + 1, right);
}
}

private static void merge(int a[], int tmpArray[], int leftPos, int rightPos, int rightEnd) {
int leftEnd = rightPos - 1;
int tmpPos = leftPos;
int numElements = rightEnd - leftPos + 1;

while (leftPos <= leftEnd && rightPos <= rightEnd) {
if (a[leftPos] < (a[rightPos])) {
tmpArray[tmpPos++] = a[leftPos++];
} else {
tmpArray[tmpPos++] = a[rightPos++];
}
}
while (leftPos <= leftEnd) {
tmpArray[
tmpPos++ ] = a[leftPos++];
}
while (rightPos <= rightEnd) {
tmpArray[tmpPos++] = a[rightPos++];
}

for (int i = 0; i < numElements; i++, rightEnd--) {
a[rightEnd] = tmpArray[rightEnd];
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar