elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Ayuda de como eliminar un valor contenido en un arreglo.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda de como eliminar un valor contenido en un arreglo.  (Leído 1,770 veces)
Langosta Sexual

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Ayuda de como eliminar un valor contenido en un arreglo.
« en: 6 Febrero 2015, 02:22 am »

Voy a ser breve, yo veo clases con un profesor que explica bien y sabe lo que hace, pero su unico problema es que va al par con el alumno mas lento en lugar de ir avanzando acorde al conocimiento de la mayoria, ya estoy algo cansado de ir a clases de programacion a hacer programitas de "calcule la suma de dos numeros" o "calcule el producto de 2 arreglos". El dia de ayer descargue un libro llamado "Murach's java programing" para aprender por mi cuenta, libro bastante bueno pero con pocos ejercicios en el, asi que empeze a buscar por internet y encontra algunos algoritmos "faciles" y decidi empezar a hacerlos para aprender mas, les escribire el problema.

Problema:

Un negociante ocupado tiene varias tareas de igual importancia que debe completar. Para decidir cual de las varias tareas va a resolver primero el negociante elabora la siguiente operación.
El escribe en una hoja todas las tareas que debe realizar de forma circular, de forma que la primera tarea que escribió es adyacente a la ultima que escribió . El luego piensa en un numero positivo y par. Este numero es un valor cualquiera sacado de su mente que el llama “n”. comenzando desde la primera tarea, el va de tarea en tarea moviéndose en sentido de las agujas de un reloj (desde el elemento 1 de la lista, al elemento 2, al elemento 3 … etc) contando desde 1 hasta “n”. Cuando cuenta hasta “n”, el elimina esta tarea de la lista y comienza a contar desde la siguiente tarea disponible. El repite este procedimiento hasta que solo 1 tarea quede en la lista. La tarea que queda al final del procedimiento es la tarea que el va a ejecutar primero.

Ejemplo:
1)   
       Tareas{"a","b","c","d"}
N=2

Returns: "a"

Empezamos contando desde a. asi a es 1, b es 2. Eliminamos b, entonces en la lista quedan las tareas {a,c,d}. continuamos desde c. Asi que c es 1, d es 2. Eliminamos d, la lista contiene ahora {a,c}.. Continuamos desde a. Así que a es 1, c es 2. Eliminamos c, y la tarea que quedo en la lista es la tarea que va a ejecutar el negociante, a.

Este es el codigo que ya tengo escrito.

Código
  1. package tareasdenegocio;
  2. import java.util.*;
  3. public class TareasDeNegocio {
  4.  
  5.    public static void main(String[] args)
  6.    {
  7.        Scanner ec = new Scanner (System.in);
  8.        int CantidadTareas=0,Numero;
  9.        System.out.println("Introduzca la cantidad de tareas que desea calcular\n");
  10.        CantidadTareas = ec.nextInt();
  11.        String Tareas []= new String [CantidadTareas];
  12.  
  13.        for (int x=0;x<CantidadTareas;x++)
  14.        {
  15.        System.out.println("Introduzca la tarea numero "+x+"\n");
  16.        Tareas[x]=ec.nextLine();
  17.            if (x==CantidadTareas)
  18.            {
  19.            System.out.println("Introduzca un numero positivo\n");
  20.            Numero=ec.nextInt();
  21.            }
  22.        }
  23.    }  
  24. }

Si es muy poco, mis disculpas, no tengo amplios conocimientos en java, solo quiero aprender.
Por si alguien necesita la fuente de donde yo habia sacado el algoritmos, aqui esta (en ingles): http://community.topcoder.com/stat?c=problem_statement&pm=1585&rd=6535

Mod: no hagas doble post


« Última modificación: 6 Febrero 2015, 02:41 am por engel lex » En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Ayuda de como eliminar un valor contenido en un arreglo.
« Respuesta #1 en: 6 Febrero 2015, 03:59 am »

Hay un pequeño error en el enunciado, porque siempre van a quedar 2 elementos y si el índice (n) excede de la cantidad de elementos obtendrás un ArrayOutOfBoundsException, que quiere decir que sea querido acceder a un índice mayor al límite. Es un desbordamiento.

Lo que debes hacer es una vez que quedan dos elementos, evaluar si el índice a eliminar no excede de 2, si es así que elimine el elemento situado en el índice especificado, pero si el índice excede de 2, que elimine uno de los dos. En mi caso, elegí eliminar el segundo.

Todo el proceso se hará en un bucle cuya condición será que se ejecutará mientras no quede un elemento en la lista. Cuando quede un elemento, termina.

Código
  1. public static void main(String[] xD) {
  2.        List<String> tasks = new ArrayList<>();
  3.        Collections.addAll(tasks,
  4.                "Aprender Java",
  5.                "Practicar ejercicios algor&#237;tmicos",
  6.                "Aprender buenas pr&#225;cticas de programaci&#243;n",
  7.                "Aprender a usar patrones de dise&#241;o");
  8.        System.out.print("Ingrese el &#237;ndice de las tareas a eliminar: ");
  9.        byte indexOfTaskToDelete = new Scanner(System.in).nextByte();
  10.        while(tasks.size() != 1) {
  11.            for (byte i = 0; i < tasks.size(); i++) {
  12.                if (tasks.size() == 2) {
  13.                    if(indexOfTaskToDelete == 1)
  14.                        tasks.remove(i);
  15.                    else
  16.                        tasks.remove(1);
  17.                }
  18.                else {
  19.                    if (i == indexOfTaskToDelete - 1)
  20.                        tasks.remove(i);
  21.                }
  22.            }
  23.        }
  24.        System.out.println("\nLa tarea a ejecutar es: ");
  25.        tasks.forEach(System.out::println);
  26.    }

Concretamente, ésta es la parte que evalúa si quedan dos elementos:

Código
  1. if (tasks.size() == 2) {
  2.    if(indexOfTaskToDelete == 1)
  3.        tasks.remove(i);
  4.    else
  5.        tasks.remove(1);
  6. }

Si el tamaño de la lista es igual a 2, que evalúe: Si el índice especificado es igual a i, significa que el índice especificado está en el rango del tamaño de la lista, por lo que se podrá eliminar. Si no está, elimina el segundo elemento.

Esta parte:

Código
  1. else {
  2. if (i == indexOfTaskToDelete - 1)
  3.    tasks.remove(i);
  4. }

Evalúa si el índice actual de la lista es igual al índice proporcionado - 1, que elimine la tarea. ¿Por qué -1? Por que en lenguajes de programación, listas y arreglos cuentan a partir de cero.

Perdón por esto:

Código
  1. tasks.forEach(System.out::println);

Es lo mismo que:

Código
  1. for(String task : tasks)
  2.    System.out.println(task);

La diferencia de sintaxis se debe a que la primera forma usa lambdas, una característica de Java 8.

Salu2.


« Última modificación: 6 Febrero 2015, 04:03 am por Gus Garsaky » En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
Langosta Sexual

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Ayuda de como eliminar un valor contenido en un arreglo.
« Respuesta #2 en: 6 Febrero 2015, 04:39 am »

Gracias por la respuesta, aunque antes de dar por resuelto el tema yo debo de estudiar mas sobre el metodo java.util.ArrayList; porque la verdad lo desconozco, una duda antes de ponerme a estudiar, se que esto que voy a escribir no compilara, pero, ¿se puede codificar algo similar para que el usuario pueda añadir las tareas a al arreglo que contiene las tareas?.

algo similar a esto (pero que compile).

Código
  1. {
  2. System.out.println("Introduzca una tarea para añadir en la lista: ");
  3.      String x;
  4.      x=ec.nextLine();
  5.      Tareas.add.(x);
  6.    }
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Ayuda de como eliminar un valor contenido en un arreglo.
« Respuesta #3 en: 6 Febrero 2015, 04:50 am »

ArrayList no es un método, es una clase que implementa la interface List. Respecto a tu otra pregunta, el código que pusiste compilaría si le quitas el "." entre add y los paréntesis. add es el método de List que te permite agregar cosas de acuerdo al tipo de dato que le has especificado.

Código
  1. tareas.add(x.nextLine());

PD: Los nombres de variables deben comenzar con minúsculas.
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cómo contar número de caracteres del valor contenido en una variable SOLUCIONADO
Scripting
<ИΘZIЭ(ŦB> 3 5,518 Último mensaje 25 Agosto 2009, 05:52 am
por leogtz
eliminar valor en un arreglo
Java
jexus 1 1,070 Último mensaje 12 Octubre 2013, 14:48 pm
por ThinkByYourself
Duda de como pedir el valor contenido dentro de un arreglo.
Java
Langosta Sexual 2 1,243 Último mensaje 3 Febrero 2015, 18:51 pm
por Langosta Sexual
Como eliminar la casilla de un arreglo en java?
Java
fst091 3 2,514 Último mensaje 1 Abril 2016, 23:53 pm
por LaiaxanIV
Duda - Como eliminar numeros repetidos de un arreglo en C?
Programación C/C++
palacio29 9 15,230 Último mensaje 30 Agosto 2019, 23:52 pm
por KrishCM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines