Estructura de datos java (Listas simplemente enlazadas) Primer aporte
Buenas madrugadas a todos, aquí dejo un simple aporte, espero no este posteado ya, y espero les sea muy útil, saludos!
* Lista Simplemente enlazada.
*
*/
/**
*
* @author Pain
*/
//Clase Nodo. Utiliza el enlace llamado nodoDer o nodo derecho y el valor a introducir.
public class Nodo {
Nodo nodoDer;
int dato;
public Nodo(int dato) {
this.dato = dato;
this.nodoDer = null;
}
}
/*
* Clase de Lista enlazada y metodos de agregar al final y borrar del mismo, asi como mostrar tamaño y visualizar lista.
*
*/
import javax.swing.JOptionPane;
/**
*
* @author Pain
*/
public class ListaS {
private Nodo primero;
private Nodo ultimo;
private int tamano;
public ListaS() {
this.primero = null;
this.ultimo = null;
this.tamano = 0;
}
//Metodo utilizado para denotar que la lista se encuentra vacia.
public boolean siVacio() {
return (this.primero == null);
}
//Metodo para agregar al final de la lista.
public ListaS addLast(int dato) {
if(siVacio()) {
Nodo nuevo = new Nodo(dato);
primero = nuevo;
ultimo = nuevo;
nuevo.nodoDer = nuevo;
}
else {
Nodo nuevo = new Nodo(dato);
nuevo.nodoDer = null;
ultimo.nodoDer = nuevo;
ultimo = nuevo;
}
this.tamano++;
return this;
}
//Metodo para borrar al final de la lista.
public Nodo deleteLast() {
Nodo eliminar = null;
if(siVacio()) {
JOptionPane.showMessageDialog(null, "La lista se encuentra vacia");
return null;
}
if(primero == ultimo) {
primero = null;
ultimo = null;
}
else {
Nodo actual = primero;
while(actual.nodoDer != ultimo) {
actual = actual.nodoDer;
}
eliminar = actual.nodoDer;
actual.nodoDer = null;
ultimo = actual;
}
this.tamano--;
return eliminar;
}
//Metodo que imprime el tamaño de la lista.
public void tamano() {
JOptionPane.showMessageDialog(null, "El tamaño es:\n " + this.tamano);
}
//Metodo que imprime la lista y los valores ingresados.
public void imprimir() {
if(tamano != 0) {
Nodo temp = primero;
String str = "";
for(int i = 0; i < this.tamano; i++) {
str = str + temp.dato + "\n";
temp = temp.nodoDer;
}
JOptionPane.showMessageDialog(null, str);
}
}
}
Espero que de alguna manera les sea de utilidad este código. Saludos Comunidad.
- Pain5610's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
Generics
Con Generics podrias manejar listas de un cierto tipo de objeto. Y si el método de tamano() devuelve un int con el tamaño en vez de imprimir un diálogo, entonces ya no depende de Swing y se puede usar en aplicaciones sin interfaz gráfica o en web, etc.
En la clase Nodo, la propiedad nodoDer debería ser privada y la clase debe tener accesores para modificarlo. La propiedad dato en vez de int puede ser genérica, algo asi:
private Nodo<T> sig;
private T dato;
public Nodo(T data) {
dato = data;
}
public Nodo(T data, Nodo<T> sig) {
dato = data;
this.sig = sig;
}
public void setSiguiente(Nodo<T> sig) {
this.sig = sig;
}
public Nodo<T> getSiguiente() {
return sig;
}
public T getDato() {
return dato;
}
}
De igual manera la lista la haces genérica para poder manejar listas que almacenen datos de cualquier clase.
Gracias por compartir
Qué bueno que le dedique tiempo a entender estructuras de datos y a compartir lo que produces. Ahora si me permites, me enfocaré en algunos aspectos técnicos de tu implementación, que espero nadie utilice pues tiene deficiencias importantes, comprensibles porque estás aprendiendo.
1) Familiarízate con el concepto de ocultamiento de información (information hiding). Varios autores lo denominan también encapsulamiento. No está presente en tu diseño.
2) Quítale la interfaz de usuario, sepárala en otra clase. Familiarízate con el concepto de separación de ocupaciones o Separation of concerns. Aprende a usar una consola (línea de comandos).
3) Usa adecuadamente los comentarios JavaDoc. Pusiste un comentario en línea que debiera de haber ido en el bloque JavaDoc.
4) Las inicializaciones que pusiste en el constructor son redundantes, el compilador hubiera creado ese mismo constructor (si tu no lo hubieras declarado). Familiarízate con los valores por defecto de los tipos Java.
5) Familiarízate con el Java Collections Framework. Especialmente la interfaz java.util.List y las clases java.util.AbstractCollection, java.util.AbstractList, java.util.JavaAbstractSequentialList y finalmente java.util.LinkedList. Tienes el código fuente de Java, ábrelo, despanzúrralo, disfrútalo y aprende.
Saludos
Javier Castañón
Conceptos
De acuerdo con los puntos 1 al 4 (el 1 y 2 son los que yo me enfoqué en mi post). En cuanto al 5, supongo que ese código salió de una tarea en clases de programación, porque aunque en Java existen cosas como ArrayList, Vector, HashMap, Hashtable, TreeSet, etc etc, es bueno que se tenga conocimiento de conceptos básicos como listas simplemente ligadas, listas doblemente ligadas, etc. A fin de cuentas es manejo de objetos y apuntadores y resolver problemas muy básicos, que para aprender son muy útiles.
Como dices, nadie en la práctica debería usar algo así porque Java ya incluye estructuras de datos más eficientes que esto. Tal vez el problema de raíz es que el prof no eligió el mejor lenguaje para enseñar este tipo de cosas (Pascal o C pueden ser mejores opciones; en C, un apuntador mal manejado truena el programa completo, y despues de perder muchisimo tiempo depurándolo, no se te vuelve a olvidar checar nulos, hacer free() por cada malloc() etc).
Siempre he creído que Java no es un buen lenguaje para aprender a programar. Como mínimo, es útil para aprender programación orientada a objetos, pero no programación básica. Sigo creyendo que antes de eso, hay que ver estructuras de datos básicas y algo de programación estructurada, solamente para tener bien presentes los conceptos más básicos de cómputo y programación.
Conceptos
Totalmente de acuerdo, mi mensaje quedó mal, porque quise decir "Qué bueno que le dediques tiempo a entender estructuras de datos" Me ha tocado trabajar con mucha gente que no tiene idea sobre estructuras de datos, coincido contigo que más allá del lenguaje de programación seleccionado, es conocimiento básico.
Concurro contigo también que C sería una mejor elección para aprender a programar, por la razón que mencionas: un programa mal hecho en Java de todas maneras corre, en cambio un programa mal hecho en C provoca un segfault. Ocurre que como el muchacho está aprendiendo Java, la verdad me faltó valor para referenciarlo a las colecciones de C++, que encuentro más complicadas que las de Java. Un amigo me dijo que las de SmallTalk son muy bonitas, pero yo las desconozco.
Saludos
Javier Castañón
como se guardan eliminar y borran datos en netbeans 6.5 y MySQL
Hola soy de colombia estudio analisis y diseño de sistemas de informacion tengo una duda no se por que me ha generado error el siguiente codigo me puden ayudar por favor es para la entrega de mi proyecto y no he podido avanzar ya esta los enlaces hechos en la base de datos trabajo con mysql y bueno no me genera error pero tampoco hace el proceso y cuando voy a guardar no lo hace
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package proyecto;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.webui.jsf.component.Alert;
import com.sun.webui.jsf.component.Button;
import com.sun.webui.jsf.component.Calendar;
import com.sun.webui.jsf.component.Form;
import com.sun.webui.jsf.component.Label;
import com.sun.webui.jsf.component.TextField;
import javax.faces.FacesException;
import javax.faces.event.ValueChangeEvent;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/**
*
Page bean that corresponds to a similarly named JSP page. This
* class contains component definitions (and initialization code) for
* all components that you have defined on this page, as well as
* lifecycle methods and event handlers where you may add behavior
* to respond to incoming events.
*
* @version personal.java
* @version Created on 1/04/2009, 07:20:03 AM
* @author C.A.S.A
*/
public class personal extends AbstractPageBean {
//
/**
*
Automatically managed component initialization. WARNING:
* This method is automatically generated, so any user-specified code inserted
* here is subject to being replaced.
*/
private void _init() throws Exception {
}
private TextField nombre = new TextField();
public TextField getNombre() {
return nombre;
}
public void setNombre(TextField tf) {
this.nombre = tf;
}
private TextField apellido = new TextField();
public TextField getApellido() {
return apellido;
}
public void setApellido(TextField tf) {
this.apellido = tf;
}
private TextField telefono = new TextField();
public TextField getTelefono() {
return telefono;
}
public void setTelefono(TextField tf) {
this.telefono = tf;
}
private TextField direccion = new TextField();
public TextField getDireccion() {
return direccion;
}
public void setDireccion(TextField tf) {
this.direccion = tf;
}
private TextField cargo = new TextField();
public TextField getCargo() {
return cargo;
}
public void setCargo(TextField tf) {
this.cargo = tf;
}
private Calendar fecha_ingreso = new Calendar();
public Calendar getFecha_ingreso() {
return fecha_ingreso;
}
public void setFecha_ingreso(Calendar c) {
this.fecha_ingreso = c;
}
private Calendar fecha_salida = new Calendar();
public Calendar getFecha_salida() {
return fecha_salida;
}
public void setFecha_salida(Calendar c) {
this.fecha_salida = c;
}
private TextField tipo_capacitacion = new TextField();
public TextField getTipo_capacitacion() {
return tipo_capacitacion;
}
public void setTipo_capacitacion(TextField tf) {
this.tipo_capacitacion = tf;
}
private Label label2 = new Label();
public Label getLabel2() {
return label2;
}
public void setLabel2(Label l) {
this.label2 = l;
}
private Label label3 = new Label();
public Label getLabel3() {
return label3;
}
public void setLabel3(Label l) {
this.label3 = l;
}
private Label label4 = new Label();
public Label getLabel4() {
return label4;
}
public void setLabel4(Label l) {
this.label4 = l;
}
private Label label5 = new Label();
public Label getLabel5() {
return label5;
}
public void setLabel5(Label l) {
this.label5 = l;
}
private Label label6 = new Label();
public Label getLabel6() {
return label6;
}
public void setLabel6(Label l) {
this.label6 = l;
}
private Label label7 = new Label();
public Label getLabel7() {
return label7;
}
public void setLabel7(Label l) {
this.label7 = l;
}
private Label label8 = new Label();
public Label getLabel8() {
return label8;
}
public void setLabel8(Label l) {
this.label8 = l;
}
private Label label9 = new Label();
public Label getLabel9() {
return label9;
}
public void setLabel9(Label l) {
this.label9 = l;
}
private Button guardar = new Button();
public Button getGuardar() {
return guardar;
}
public void setGuardar(Button b) {
this.guardar = b;
}
private Button consulta2 = new Button();
public Button getConsulta2() {
return consulta2;
}
public void setConsulta2(Button b) {
this.consulta2 = b;
}
private Form form2 = new Form();
public Form getForm2() {
return form2;
}
public void setForm2(Form f) {
this.form2 = f;
}
private TextField id_empleado2 = new TextField();
public TextField getId_empleado2() {
return id_empleado2;
}
public void setId_empleado2(TextField tf) {
this.id_empleado2 = tf;
}
//
/**
*
Construct a new Page bean instance.
*/
public personal() {
}
/**
*
Callback method that is called whenever a page is navigated to,
* either directly via a URL, or indirectly via page navigation.
* Customize this method to acquire resources that will be needed
* for event handlers and lifecycle methods, whether or not this
* page is performing post back processing.
*
*
Note that, if the current request is a postback, the property
* values of the components do not represent any
* values submitted with this request. Instead, they represent the
* property values that were saved for this view when it was rendered.
*/
@Override
public void init() {
// Perform initializations inherited from our superclass
super.init();
// Perform application initialization that must complete
// *before* managed components are initialized
// TODO - add your own initialiation code here
//
// Initialize automatically managed components
// *Note* - this logic should NOT be modified
try {
_init();
} catch (Exception e) {
log("personal Initialization Failure", e);
throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
}
//
// Perform application initialization that must complete
// *after* managed components are initialized
// TODO - add your own initialization code here
}
/**
*
Callback method that is called after the component tree has been
* restored, but before any event processing takes place. This method
* will only be called on a postback request that
* is processing a form submit. Customize this method to allocate
* resources that will be required in your event handlers.
*/
@Override
public void preprocess() {
}
/**
*
Callback method that is called just before rendering takes place.
* This method will only be called for the page that
* will actually be rendered (and not, for example, on a page that
* handled a postback and then navigated to a different page). Customize
* this method to allocate resources that will be required for rendering
* this page.
*/
@Override
public void prerender() {
}
/**
*
Callback method that is called after rendering is completed for
* this request, if
init()
was called (regardless of whether* or not this was the page that was actually rendered). Customize this
* method to release resources acquired in the
init()
,*
preprocess()
, orprerender()
methods (or* acquired during execution of an event handler).
*/
@Override
public void destroy() {
}
public void checkbox1_processValueChange(ValueChangeEvent event) {
}
public String consulta2_action() {
// TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.
return "case2";
}
private TextField area1 = new TextField();
public TextField getArea1() {
return area1;
}
public void setArea1(TextField tf) {
this.area1 = tf;
}
private Alert alert2 = new Alert();
public Alert getAlert2() {
return alert2;
}
public void setAlert2(Alert a) {
this.alert2 = a;
}
private Alert alert1 = new Alert();
public Alert getAlert1() {
return alert1;
}
public void setAlert1(Alert a) {
this.alert1 = a;
}
public String guardar_action() {
JTable dat=new JTable();
DefaultTableModel j=(DefaultTableModel) dat.getModel();
dat.setModel(j);
j.setColumnCount(7);
j.setRowCount(1);
j.setValueAt(id_empleado2.getText(), 0, 0);
j.setValueAt(nombre.getText(), 0, 1);
j.setValueAt(apellido.getText(), 0, 2);
j.setValueAt(telefono.getText(), 0, 3);
j.setValueAt(direccion.getText(), 0, 4);
j.setValueAt(cargo.getText(), 0, 5);
j.setValueAt(fecha_ingreso.getText(), 0, 6);
j.setValueAt(fecha_salida.getText(), 0, 7);
j.setValueAt(tipo_capacitacion.getText(), 0, 8);
if(comprobar()){
//desactivo el boton de guardar
//creo la conexion a la base de datos
conection c=new conection("localhost/porcinos","root","123456");
//guardo la consulta en un string y le concateno el valor del jtextfield junto con los de la tabla
String consulta="INSERT INTO porcinos.personal ('id_empleado', 'nombre', 'apellido', 'telefono', 'direccion', 'cargo', 'fecha_ingreso','fecha_salida','tipo_capacitacion') VALUES('"+Integer.parseInt((String)j.getValueAt(0, 0))+"','"+(String)j.getValueAt(0, 1)+"','"+(String)j.getValueAt(0, 2)+"','"+Integer.parseInt((String)j.getValueAt(0, 3))+"','"+(String)j.getValueAt(0, 4)+"','"+(String)j.getValueAt(0, 5)+"','"+(String)j.getValueAt(0, 6)+"','"+(String)j.getValueAt(0,7)+"','"+(String)j.getValueAt(0, 8)+"')";
//lo debemos atrapar dentro de un TRY por que es una exception marcada.
try{
//creamos el Statement para hacer consultas
java.sql.Statement st=c.conection().createStatement();
/*aqui ejecutamos la consulta y la comprobamos ya que el metodo executeUpdate manda un int de
las fias afectadas*/
if
(st.executeUpdate(consulta)==1){
//solo despliego un cuadro texto para dar aviso
alert2.setVisible(false);
alert1.setVisible(true);
id_empleado2.setText("");
nombre.setText("");
apellido.setText("");
telefono.setText("");
direccion.setText("");
cargo.setText("");
fecha_ingreso.setText("");
fecha_salida.setText("");
tipo_capacitacion.setText("");
}
else
{
alert2.setVisible(true);
}
}
catch(
java.sql.SQLException e){
e.printStackTrace();
alert2.setVisible
(true);
alert1.setVisible
(false);
}
}
return null;
}
public String button1_action() {
// TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.
return "case1";
}
public String button4_action() {
// TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.
return null;
}
public String button5_action() {
// TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.
return null;
}
public String INICIO_action() {
// TODO: Process the action. Return value is a navigation
// case name where null will return to the same page.
return "case3";
}
private boolean comprobar() {
conection c=new conection("localhost/porcinos","root","123456");
//guardo la consulta en un string y le concateno el valor del jtextfield junto con los datos de la tabla
//en esta consulta SQL deseo saber si ya existe tanto la matricula como el nombre
String consulta="SELECT * FROM porcinos.personal WHERE (id_empleado='"+id_empleado2.getText()+"') AND (id_empleado='"+id_empleado2.getText()+"')";
//lo debemos atrapar dentro de un TRY por que es una exception marcada.
try{
//creamos el Statement para hacer consultas
java.sql.Statement st=c.conection().createStatement();
java.sql.ResultSet rs=st.executeQuery(consulta);
//voy a comprobar si ya existe un registro.
if(rs.next()){
//solo despliego un cuadro texto para dar aviso
alert2.setVisible(true);
alert1.setVisible(false);
return false;
}else{
//aqui verificare si ya Existe la Matricula
consulta="SELECT * FROM porcinos.personal WHERE id_empleado='"+id_empleado2.getText()+"'";
rs=st.executeQuery(consulta);
if(rs.next()){
//mando un mensaje en pantalla
alert2.setVisible(true);
alert1.setVisible(false);
return false;
}else{
//aqui verificare si ya Existe el Nombre
consulta="SELECT * FROM porcinos.personal WHERE id_empleado='"+id_empleado2.getText()+"'";
rs=st.executeQuery(consulta);
if(rs.next()){
//mando un mensaje en pantalla
alert2.setVisible(true);
alert1.setVisible(false);
return false;
}
else
{
return true;
}
}
}
}
catch(java.sql.SQLException e){
e.printStackTrace();
return false;
}
}
}
Gracias espero respuestas es urgente
RE: Gracias por compartir
Hola Javier, me parecen muy buenas las recomendaciones que das, aunque la número 4 a pesar de que no está mal, es una muy buena práctica realizar todas todas esas declaraciones redundantes, ya que se presta menos a confusiones y el código es mas claro.
Sobre la numero 4.
"It's a good idea to initialize all your variables, even if you're assigning them
with the default value. Your code will be easier to read; programmers who
have to maintain your code (after you win the lottery and move to Tahiti) will
be grateful."
Referencias: Sun Certified Programmer for Java 6 Study Guide; Kathy Sierra; Pág 242.
Incializar si tiene sentido
De hecho, inicializar todas las variables, asi nomas por que si, no es buena idea, me a tocado ver mucho codigo donde se hacen cosas como:
cadena="Algun valor";
(Lo cual no solo es redundante si no tambien ineficiente) Uno debe inicializar las variables solo si tiene sentido hacerlo
De echo no se deven
De echo no se deven inicializar variables a lo loco XD ya que cada vez que pones el
new
estas reservando espacio en memoria (de la maquina virtual) de una variable ni utilizaras hasta dentro de unos cuantos metodosMetodo Eliminacion cualquier dato??
hola q tal amigos de java, mi pregunta es la siguiente dado q hay un metodo eliminacion, como seria el metodo eliminacion de cualquier dato, es decir guiandose por el dato insertado, y q en esa poscicion eliminemos ese dato, y apunte a nuestro siguiente nodo???
porq lo trate de hacer pero nada mas no me funciona :(... dado q soy nuevo en java
se pude decir q en en c es asi
1. El primer paso es buscar el elemento a borrar que será apuntado por aux y el elemento anterior será apuntado por ant.
2. ant -> siguiente cogerá el valor de aux -> siguiente.
3. Liberamos aux.
ahora en java como quedaria???
listas sencillamente enlazadas
buenas necesito ayuda con un program que tengo q realizar en netbeans de listas senciillamente enlazadas.
necesito montar una lista sencillamente enlazada para encontrar un bibliotecario, el codigo, nombre y genero y autor son datos que debn registrarse.
se desea obtener un listado de todos los libros registrados, ademas establecer la exitencia de un libro y en tal caso mostrar sus datos.
les agradezco que me ayuden :D
Ayuda
Oye, como mando llamar los metos en una clase principal?
apenas estoy empezando en esto y la vda es interesante pero tmbn muy confuso, espero que alguien me pueda ayudar ;)
metodos
bueno si con metos te refieres a metodos es muy facil solo deblara tu metodo por ejemplo
int sumaEnteros ( int a, int b ) {
int c = a + b;
return c;
}
y dentro de la clase principal lo mandas llamar ingresando dentro de los parametros las variables que mandaras hacia el mismo...
sumaEnteros(x,y);
espero q te sirva...
Metodos
esque dice que falta el constructor... y como eh utilizado metodos en una clase , donde me sale el Public Static void ( main String() ) bueno algoo asi que es el que te hace ejecutar el programa. entonses lo intento poner en su lugar en el codigo de arriba y me marka error en los corchetes al final, entonses quiciera saber si por metodos sse puede utilizar el codigo de arriba...
ayuda
hola buenos dias estoy estudiando informatica en venezuela y no majeo muy bien esto de la estructura de datos estoy que raspo la materia me mandaron un taller para recuperla de estrucura de datos hacer cuatro progrmas de lista pila cola y arbol con menu y no se nada de eso estoy buscando personas que quieran ayudarme estoy muy urgido si por favor alguien sabe aqui en caracas venezuela quien los hace yo los pago
Me sale error
Me sale el siguiente error al copiar el programa:
error: class, interface, or enum expected
import javax.swing.JOptionPane;
^
me podria ayudar alguien??
Ayuda al "error"
Solo es el orden,pega este código tal y como esta
ListaS.java
/**
*
* @author Pain
*/
public class ListaS {
private Nodo primero;
private Nodo ultimo;
private int tamano;
public ListaS() {
this.primero = null;
this.ultimo = null;
this.tamano = 0;
}
//Metodo utilizado para denotar que la lista se encuentra vacia.
public boolean siVacio() {
return (this.primero == null);
}
//Metodo para agregar al final de la lista.
public ListaS addLast(int dato) {
if(siVacio()) {
Nodo nuevo = new Nodo(dato);
primero = nuevo;
ultimo = nuevo;
nuevo.nodoDer = nuevo;
}
else {
Nodo nuevo = new Nodo(dato);
nuevo.nodoDer = null;
ultimo.nodoDer = nuevo;
ultimo = nuevo;
}
this.tamano++;
return this;
}
//Metodo para borrar al final de la lista.
public Nodo deleteLast() {
Nodo eliminar = null;
if(siVacio()) {
JOptionPane.showMessageDialog(null, "La lista se encuentra vacia");
return null;
}
if(primero == ultimo) {
primero = null;
ultimo = null;
}
else {
Nodo actual = primero;
while(actual.nodoDer != ultimo) {
actual = actual.nodoDer;
}
eliminar = actual.nodoDer;
actual.nodoDer = null;
ultimo = actual;
}
this.tamano--;
return eliminar;
}
//Metodo que imprime el tamaño de la lista.
public void tamano() {
JOptionPane.showMessageDialog(null, "El tamaño es:\n " + this.tamano);
}
//Metodo que imprime la lista y los valores ingresados.
public void imprimir() {
if(tamano != 0) {
Nodo temp = primero;
String str = "";
for(int i = 0; i < this.tamano; i++) {
str = str + temp.dato + "\n";
temp = temp.nodoDer;
}
JOptionPane.showMessageDialog(null, str);
}
}
/*
* Lista Simplemente enlazada.
*
*/
/**
*
* @author Pain
*/
//Clase Nodo. Utiliza el enlace llamado nodoDer o nodo derecho y el valor a introducir.
public class Nodo {
Nodo nodoDer;
int dato;
public Nodo(int dato) {
this.dato = dato;
this.nodoDer = null;
}
}
/*
* Clase de Lista enlazada y metodos de agregar al final y borrar del mismo, asi como mostrar tamaño y visualizar lista.
*
*/
}
Gracias
Ya no me marca el error pero a la hora de correr el programa me manda un mensaje que dice:
"No main methods, applets, or MIDlets found in file"
Main
No hay método main en la aplicación ... ¿no lo notaste?
0_o
Si lo note
Si lo no te, lo que pasa es que donde estoy estudiando nos pusieron a copiar ese programa y tenemos que explicar como es que funciona cada método del mismo. Entonces ¿qué es lo que hace este programa o como puedo hacer para que corra?
muy bueno gracias por el
muy bueno gracias por el aporte, solo tengo una pregunta como puedo buscar un nodo en una lista?? necesito que lo busque y me diga donde esta el nodo saludos y gracias muy bueno
Referente a tu ultimo cometario
[quote]Siempre he creído que Java no es un buen lenguaje para aprender a programar. Como mínimo, es útil para aprender programación orientada a objetos, pero no programación básica. Sigo creyendo que antes de eso, hay que ver estructuras de datos básicas y algo de programación estructurada, solamente para tener bien presentes los conceptos más básicos de cómputo y programación.[/quote]
Soy totalmente nuevo en programación, pero me gusta, quisiera saber que libros recomiendas para entender mejor las estructuras de datos básicos, como las clases.
Gracias por responder.
ADT
Estimado Felipe, con estructuras de datos básicas se refiere a lo que tradicionalmente se llama Tipo de Dato Abstracto o ADT por sus siglas en inglés. Esencialmente, desde los tiempos de C al introducir el comando typedef podías crear un nuevo tipo de dato compuesto, lo que te inducía a aprender a manejar la memoria, usar punteros y muchos otros conceptos divertidos.
Estructura de datos != Tipos
Estructura de datos != Tipos de datos abstractos.
De la wikipedia:
En las ciencias de la computación, un tipo de dato abstracto es un modelo matemático para los tipos de datos, donde un tipo de dato está definido por su comportamiento (semántica) desde el punto de vista del usuario de los datos, específicamente en términos de valores posibles, operaciones posibles sobre ese tipo de dato y comportamiento de estas operaciones. En contraste con las estructuras de datos que son representaciones concretas de datos y son el punto de vista del implementador no del usuario.
Re: "programación básica"
¿Y qué es
"programación básica"
?En mis primeros programas de Java (mi primer lenguaje), tenía todo dentro del método
main
. Eran de calcular promedios, convertir de °C a °F, arreglos, etc. Es decir, la PARTE 1 del libro de Ceballos (como el de la imagen, aunque otra edición), misma parte que, curiosamente, se llama "PROGRAMACIÓN BÁSICA" (ver indice (pdf)). Luego cambie al libro de Schildt y de ahí a The Java Tutorials. Y ya que "no es un buen lenguaje para aprender a programar", me pregunto si realmente aprendí a "programar".:-P
~~~
Alguien necesita repasar C
Deberías de hacerle menos caso a chafapedia mi estimado Oscar. Las clases surgen a partir de estas estructuras, agregándole la capacidad de tener métodos.
No está ligado a C, es un
No está ligado a C, es un concepto computacional, no de un lenguaje de programación específico.
Los tipos de datos abstractos y las estructuras de datos son conceptos distintos aunque estén relacionados. El primero define "qué" puede hacer un tipo de dato (de forma abstracta doh) y el segundo como hacerlo, de forma concreta.
Java como primer lenguaje
Cuando digo que Java no es un buen lenguaje para aprender a programar, me refiero a que no es la mejor opción como primer lenguaje. Obvio eso no significa que si aprendiste a programar en Java como primer lenguaje, no sepas programar. Eso es tergiversar las cosas.
A lo que me refiero es a que la curva de aprendizaje es algo alta, y hay varias cosas que estorban en el camino del aprendizaje de los conceptos fundamentales. Por ejemplo:
La cantidad de conceptos involucrados en eso, es absurdamente alta para alguien que empieza a programar.
En groovy, corres groovysh y tecleas
println "hola"
y listo. O guardas eso en un archivo que se llame como te dé la gana con extensióngroovy
y lo corres congroovy blabla.groovy
y listo. En python, ruby, javascript, es algo similar. La curva inicial es más baja. No necesitas saber de programación orientada a objetos para poder imprimir algo en consola.Programación básica: fundamentos de cómputo. Lenguajes interpretados vs compilados, binarios, ejecutables, etc. Alojar memoria para usarla, liberarla al final, etc. Stack vs Heap, simples funciones, cosas así. Y ya luego que entiendes muchos de estos conceptos, puedes meterte a Java, para aprender OOP, ver la maravilla que es la JVM, manejo automático de memoria, etc y ahora sí apreciar todas sus bondades.
Algo de acuerdo
Ya que en la universidad que estoy, me agrada, porque es 80 % practica y 20 % teoría, lo único malo es que no te explican todo el jugo que le puedes sacar a la clase tipo Scanner o las demás clases que hay, por ejemplo voy a abrir un tema de ayuda porque tengo un problema de un minisúper que tengo la idea, pero no se poner el tipo de clase, en fin ese es otro tema.
Pero me gusta y quiero aprender espero lograrlo ya que mientras no resuelva las dudas que se me presentes estaré a cada rato atorado.