Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - m@o_614

#31
Java / Operadores de manejo de bits
15 Enero 2015, 20:19 PM
Saludos

Estoy haciendo una función a la cual le paso por parámetros una variable de tipo int, y esa variable la convierto a binario con la ayuda de operadores de bits

Código (java) [Seleccionar]
public static void funcion(int valor)
{
int i,bytes;
char binario[] = new char[32];
for(i = bytes-1;i >= 0 ;i--)
{
binario[i] = (valor&1)? '1':'0';
                        valor >> 1;
}
}


Al principio declaro un arreglo de caracteres que va a almacenar el numero binario, despues con un ciclo for voy verficando con &(el equivalente a AND) que si los dos bits son 1 en binario se almacena 1, de lo contrario se almacena 0, el problema es que con el operador condicional ? en la parte donde tengo (valor&1) me aparece un mensaje de error que dice:

cannot convert from int to boolean, y no entiendo por qué si esta misma función ya la había utilizado en un programa en C

de antemano gracias
#32
Java / Tipo Int
15 Enero 2015, 05:21 AM
Saludos

Tengo una duda sobre la asignación de valores a los tipos de datos int, por ejemplo, si yo tengo declarada una variable tipo int y a esta le asigno un valor en hexadecimal como:

int valor = 0xA// le pongo 0x para indicarle que es hexadecimal.

A la hora de imprimir valor me aparece 10, porque A equivale a 10 en notacion decimal, pero si le asigno un valor en binario como: int valor = 00000010, aqui ya no me imprime 2, como deberia de ser, me imprime 8, alguien sabe por qué es esto???

gracias
#33
Java / Almacenar cadenas en arreglos de bytes
12 Enero 2015, 06:03 AM
Saludos

Tengo el siguiente código que trata de almacenar una cadena cualquiera en un arreglo de bytes e imprimirlo

Primero tengo que crear un arreglo de bytes, y este arreglo debe contener en la primera posición un contador de caracteres.

A continuación debe almacenar en este array los codigos ASCII de cada caracter del String, y en la primera posición(o sea donde está el contador) debe de tener la longitud de la cadena. TENGO QUE USAR OBLIGATORIAMENTE EL METODO String.getBytes(). Después de realizar todo lo anterior, una subrutina reciba el arreglo de bytes e imprima solo los caracteres contenidos en el arreglo(el contador para eso sirve).

Código (java) [Seleccionar]
public class ByteArray {

public static void main(String[] args)
{
byte arregloBytes[];
String cadena = "Hola";
arregloBytes = obtenerASCII(cadena);
imprimirArreglo(arregloBytes);
}

public static byte[] obtenerASCII(String cadena)
{
int longitud,i,j;
longitud = cadena.length()+1;
byte codigosASCII[] = new byte[longitud];
                codigosASCII[0] = (byte)longitud;
for(i = 0,j = 1;i < cadena.length();i++,j++)
{
codigosASCII[j] = (byte)cadena.charAt(i);
}
return codigosASCII;
}

public static void imprimirArreglo(byte[] arregloBytes)
{
int i;
for(i = 0;i < arregloBytes.length;i++)
{
   System.out.println(""+(int)arregloBytes[i]);
}
}
}


Aqui el problema es que por ejemplo si tengo en el String ="Hola", ¿cómo hago para que en el arregloBytes, en una sola casilla tenga almacenados TODOS los codigos ASCII del caracter, si tengo H su ascii decimal será 72, su octal 036 y su hexadecimal 48.

y tampoco se bien como utilizar el metodo getBytes()

de antemano gracias
#34
Java / problema con un arbol en una pila
3 Enero 2015, 05:42 AM
Saludos

Tengo el siguiente codigo que lo que trabaja con una cola(Queue) y esta cola contiene una expresión en su forma postfija por ejemplo:

si tengo ((A*B) + (C/D)), la cola contendria : AB*CD/+, y luego tengo que crear el arbol binario de esta expresión. Para eso uso el siguiente algoritmo que trabaja con una pila

Código (java) [Seleccionar]
public static void construirArbol(){
    int error = 0;
    Stack<Object> pila = new Stack<Object>();
    Arbol arbol = new Arbol();
    Object izq,der,raiz,Elemento;
    String d = "hijoDer",i = "hijoIzq",r = "raiz";
    while(!s.isEmpty())
    {
        switch(caso(s.peek()))
        {
            case 1:
               if(pila.size() < 2)
                  error = 1;
               else
               {
               raiz = s.peek();
               der = pila.pop();
               izq = pila.pop();
               arbol.insertarNodo(raiz,r);
               arbol.insertarNodo(izq,i);
               arbol.insertarNodo(der,d);
               pila.push(arbol);
               }
               break;
            case 2:
               error = 1;
               break;
            default:
               pila.push(s.remove());
        }
    }
    if(pila.isEmpty() || pila.size() > 1)
       error = 1;
    else
    {
    Elemento = pila.pop();
    if(Elemento.)
    {
    //aqui el problema;
    }
    }
    while(!pila.isEmpty())
       pila.pop();
    }


primero dentro de un while tengo a s, que es la Cola y voy quitando elemento por elemento y en un switch veo en cual case entra, si el elemento es un operador entra en el case 1 y si la pila contiene menos de 2 elementos es un error, sino creas un arbol con una raiz, que es el elemento, y despues sacas otros dos elementos de la cola para crear los nodos izquierdo y derecho y metes ese arbol en la pila, en el case default el elemento que se encuentre en s lo apilas.

Pero tengo una duda, una vez que te sales de ese while te encuentras con un if-else, ese if te dice que si la pila esta vacia o tiene mas de un elemento hay un error, y en el else tengo que quitar un elemento de Queue y verificar si ese elemento es un Arbol, pero COMO PUEDO VERIFICAR SI ES UN ARBOL??? si yo cuando declare la pila la declara para que pudiera contener elementos de cualquier tipo, por eso le puse Object

si alguien me pudiera dar una idea de como hacer esa verificación se lo agradecería mucho
#35
Java / Análisis Semántico
26 Diciembre 2014, 21:46 PM
Saludos

Acabo de terminar de construir un analizador sintáctico para un compilador, y el siguiente paso es hacer el analizador semántico, he leído documentación de varios lados para darme un idea de los pasos que tengo que seguir, pero aún me quedan algunas dudas. El primer paso (segun lo que lei) es hacer esquemas de traducción dirigidos por la sintaxis, o sea, especificar una serie de acciones que se realizaran durante el análisis de la entrada, esto con acciones intercaladas a las reglas y atributos asociados a los no Terminales de la gramática.

por ejemplo si yo tengo la regla:

<procedimiento>:= Procedimiento Iden <parametros> <Bloque> fin Iden ;

el análisis semántico dice que me tengo que asegurar que el iden que esta antes de los parametros y el Iden que esta despues del fin sean iguales, pero no se como hacer las acciones intercaladas en esa regla o si necesita tener atributos asociados a algun no terminal(los no terminales son los que estan entre <>).

#36
Saludos

Estoy teniendo problemas con los saltos de línea de un código, yo se que en windows el system.getProperty("line.separator") es \r\n, pero cuando corres tu codigo en Java algunos saltos de linea aparecen como simple '\n', entonces si yo quiero hacer una validación en mi código como:

Si un caracter es diferente de salto de línea(ya sea '\n', '\r' o \r\n)

Código (java) [Seleccionar]
if(car != (System.getProperty("line.separator")))
          //hacer X accion


pero obvio que está validación no funciona porque estoy comparando un String con un char, pero entones como podria hacerlo?

#37
Java / Encapsulamiento
4 Diciembre 2014, 16:08 PM
Saludos

Tengo el siguiente código que es una práctica que trata de la implementación de una clase MiFecha, la cual siempre mantenga una fecha válida en sus atributos. El código que tengo es el siguiente:

Código (java) [Seleccionar]
class MiFecha{
final int CERO = 0;
final int ENERO = 1;
final int FEBRERO = 2;
final int MARZO = 3;
final int ABRIL = 4;
final int MAYO = 5;
final int JUNIO = 6;
final int JULIO = 7;
final int AGOSTO = 8;
final int SEPTIEMBRE = 9;
final int OCTUBRE = 10;
final int NOVIEMBRE = 11;
final int DICIEMBRE = 12;

private int dia;
private int mes;
private int año;

MiFecha()
{
dia =;
mes =;
año =;
}

private boolean esBisiesto(int año)
{
boolean bisiesto = false;
if(((año % 4) == CERO &&((año % 100) != CERO)) && ((año % 400) == CERO))
       bisiesto = true;
return bisiesto;
}

private boolean verificaDia(int dia)
{
boolean fechaValida = false;
switch(mes)
{
    case ENERO:
    case MARZO:
    case MAYO:
    case JULIO:
    case AGOSTO:
    case OCTUBRE:
    case DICIEMBRE:
       if(dia >= 1 && dia <= 31)
          fechaValida = true;
       break;
    case ABRIL:
    case JUNIO:
    case SEPTIEMBRE:
    case NOVIEMBRE:
       if(dia >= 1 && dia <= 30)
          fechaValida = true;
       break;
    case FEBRERO:
       if(esBisiesto(año))
       {
       if(dia >= 1 && dia <= 29)
          fechaValida = true;
       }
       else
       {
       if(dia >= 1 && dia <= 28)
          fechaValida = true;
       }
       break;
}
return fechaValida;
}

public int dameDia()
{
return dia;
}

public int dameMes()
{
return mes;
}

public int dameAnio()
{
return año;
}

public boolean fijaDia(int diax)
{
dia = diax;
return true;
}

public boolean fijaMes(int mesx)
{
mes = mesx;
return true;
}

public boolean fijaAnio(int aniox)
{
año = aniox;
return true;
}
}

public class Encapsulamiento {

public static void main(String[] args) {
MiFecha fecha = new MiFecha();
fecha.fijaDia(31);
fecha.fijaMes(11);
fecha.fijaAnio(2014);
System.out.println("DIA: "+fecha.dameDia());
System.out.println("MES: "+fecha.dameMes());
System.out.println("año: "+fecha.dameAnio());
}
}


en el código utilizo los métodos fijaDia, fijaMes y fijaAnio para asignar el número de día, de mes y de año. El problema es que el código tiene algunos requerimientos un poco extraños y que no comprendo como por ejemplo me dice:

Inicializar todos los atributos(dia,mes,año) con datos válidos por medio de un constructor sin parámetros. Y después me dice:

Codificar en el ámbito del método main lo siguiente:

a) Declaración de la variable de instancia de tipo MiFecha e instanciación.
b) Definición de todos los atributos del objeto instanciado mediante sus tres métodos de interfaz.

Entonces no se cómo declarar el constructor, si en los métodos fija ya estoy inicializando los atributos

de antemano gracias
#38
Java / exception en arbol binario
22 Noviembre 2014, 20:00 PM
Saludos

Estoy creando una arbol binario, en el cual los elementos del nodo son un apuntador al nodoIzquierdo, un  apuntador al nodoDerecho y el dato sería de tipo L, que a su vez es una clase que contiene dos elementos de tipo String uno que se llama lexema y otro categoria.

Para la clase NodoArbol tengo 2 constructores uno al que le paso un objeto de tipo L, y otra al que le paso simplemente un String, y ese string lo tengo que almacenar en el campo lexico de un objeto L, por eso lo hice de la siguiente manera:

Código (java) [Seleccionar]
class L{
String lexico;
String categoria;

L(){
lexico = "";
categoria = "";
}
}

class NodoArbol{
NodoArbol nodoIzq;
NodoArbol nodoDer;
L lexema;

public NodoArbol(L datos){
lexema = datos;
nodoIzq = nodoDer = null;
}

public NodoArbol(String datos) {
lexema.lexico = datos;// aqui esta el error
lexema.categoria = "";
nodoIzq = nodoDer = null;
}

public void insertar(L datos){
if((datos.categoria).equals("Id"))
{
if(nodoIzq == null)
{
System.out.println("nodo lado izquierdo");
   nodoIzq = new NodoArbol(datos);
}
else
   nodoIzq.insertar(datos);
}
else
{
if(nodoDer == null)
   nodoDer = new NodoArbol(datos);
else
   nodoDer.insertar(datos);
}
}

}

class Arbol{
private NodoArbol raiz;
public Arbol sig;

public Arbol(){
raiz = null;
sig = null;
}

public void insertarNodo(String datos) {
if(raiz == null)
{
       raiz = new NodoArbol(datos);
}
}

public void insertarNodo(L datos){
if(raiz == null)
{
       raiz = new NodoArbol(datos);
}
else
   raiz.insertar(datos);
}
}


el problema es que a la hora de mandar llamar al metodo insertarNodo() con un String como argumento, me manda un excepcion NullPointerException, en el siguiente constructor:

Código (java) [Seleccionar]
public NodoArbol(String datos) {
lexema.lexico = datos;// aqui esta el problema
lexema.categoria = "";
nodoIzq = nodoDer = null;
}


y no tengo idea de cómo arreglarlo

gracias de antemano
#39
Java / duda con ArrayList
21 Noviembre 2014, 07:19 AM
Saludos

esta es la primera vez que usa la clase ArrayList de java y tengo dudas sobre su funcionamiento, yo tengo una función el la cual atravez de un ciclo que lee un archivo y va agregando los elementos del archivo a la ArrayList, el problema es que no se como imprimir los datos que tengo en la lista, si se que tengo que tener un ciclo while en el que le diga que mientras lista no este vacia vaya imprimiendo. Pero como lo hago???

Código (java) [Seleccionar]
public static void Expresion(){
    ArrayList<String> lista =  new ArrayList<String>();
    lexico = Lexico();
    categoria = categoriaLexica(estadoAnterior,lexico);
    while(categoria.equals("Entero") || categoria.equals("Real") || categoria.equals("Id") || OperadorAritmetico(lexico) || OperadorRelacional(lexico) ||lexico.equals(")") || lexico.equals("("))
    {
    lista.add(lexico);
    lexico = Lexico();
    categoria = categoriaLexica(estadoAnterior,lexico);
    }
    while(!lista.isEmpty())
      System.out.println("["+lista.??????)
   }


La lista quiero que me ingrese los elementos por la cola, que es lo que creo que hace con simplemente ponerle el add. y que me imprima los elementos desde el primero hasta el ultimo, en ese orden.

de antemano gracias
#40
Dudas Generales / duda con expresion posfija
20 Noviembre 2014, 06:10 AM
Saludos

Tengo la siguiente expresión infija que dice:

(i730 + sg2LQ) + ((+G0 / (3064 + 68324.06)) / 28)

y utilice VARIOS programas que hacen conversiones de infija a posfija y viceversa, y esos programas me dicen que la respuesta es:

i730 sg2LQ + G0 3064 68324.06 + /+ 28 / +

pero me dijeron que era

i730 sg2LQ + G0 + 3064 68324.06 + / 28 /

y la verdad no se cuál de los dos es el correcto???

gracias