C sharp - Error al comparar objeto con objeto

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 9 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Error al comparar objeto con objeto

Publicado por Eduardo (5 intervenciones) el 01/04/2019 12:27:17
Hola buenas, el ejercicio que se me plantea es el siguiente:
Realice un programa que partiendo de dos matrices de cadenas de caracteres ordenadas ascendentemente pedidas por teclado, construya y visualice una tercera matriz también ordenada ascendentemente.
La idea que se persigue es construir la tercera lista ordenada (no es correcto construirla y después ordenarla con el método Short)

Y lo resuelvo de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Collections;
using System.Globalization;
 
namespace practicas_ejercicio_5
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Escribre una serie de caracteres numericos: ");
            string cadena1 = Console.ReadLine();
            Console.WriteLine("Escribe otra cadena numerica: ");
            string cadena2 = Console.ReadLine();
            ArrayList valores1 = new ArrayList();
            ArrayList valores2 = new ArrayList();
            ArrayList ordenada = new ArrayList();
            for(int i = 0; i < cadena1.Length; i++)
            {
                valores1.Add(cadena1[i]);
            }
            for(int i = 0; i<cadena2.Length; i++)
            {
                valores2.Add(cadena2[i]);
            }
            for(int i = 0; i<valores1.Count; i++)
            {
                ordenada.Add(valores1[i]);
            }
            for(int i =0; i<valores2.Count; i++)
            {
                ordenada.Add(valores2[i]);
            }
            int count = 0;
           for(int i=0; i<ordenada.Count; i++)
            {
                for(int j = 0; j<ordenada.Count; i++)
                {
                    if(ordenada[count] < ordenada[j]) //El problema es que no me deja comparar dos objetos de esta manera ¿¿¿¿¿Que hago???????
                    {
                        ordenada.Add(ordenada[j]);
                    }
                    count++;
                }
            }
 
        }
 
    }
}

por que no me deja comparar ordenada[count] < ordenada[i]
He buscado pero no encuentro o no entiendo bien la manera de hacerlo, alguien puede explicarme
Gracias
Un saludo
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
sin imagen de perfil
Val: 373
Plata
Ha aumentado su posición en 2 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Error al comparar objeto con objeto

Publicado por Agustin (171 intervenciones) el 02/04/2019 09:08:55
Decile a tu profesor que el namespace System.Collections está deprecado (obsoleto).

No se usan colecciones que no sean genéricas en .NET, y mucho menos ArrayList, que no tiene absolutamente ningún sentido y fue reemplazada hace por lo menos 15 años por System.Collections.Generic.List<T>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 9
Ha aumentado su posición en 9 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Error al comparar objeto con objeto

Publicado por Eduardo (5 intervenciones) el 02/04/2019 11:45:53
OK, he cambiando los arraylist por list<> pero el codigo no me funciona. ¿Que es lo que hago mal?
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
sin imagen de perfil
Val: 373
Plata
Ha aumentado su posición en 2 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Error al comparar objeto con objeto

Publicado por Agustin (171 intervenciones) el 02/04/2019 18:34:22
tenés que aprender, como principio fundamental e ineludible para el resto de tu vida, que "no funciona" no es una descripción adecuada para un problema.

Si te da un error de compilación, tenés que decir: "tengo el siguiente error de compilación: ....." y detallar exactamente el error, por supuesto sin olvidar incluir el fragmento de código correspondiente.

Si te da un error en runtime, tenés que describir los pasos que realizas para causar el error, junto con el detalle de la excepción o mensaje de error completo, y también incluir el fragmento de código donde ocurre la excepción o bien cualquier código que creas relevante.

La gente no puede leer tu mente ni tu pantalla.
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
sin imagen de perfil
Val: 9
Ha aumentado su posición en 9 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Error al comparar objeto con objeto

Publicado por Eduardo (5 intervenciones) el 03/04/2019 11:12:18
Ahora tengo el siguiente codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Collections.Generic;
using System.Globalization;
 
namespace practicas_ejercicio_5
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Escribre una serie de caracteres numericos: ");
            string cadena1 = Console.ReadLine();
            Console.WriteLine("Escribe otra cadena numerica: ");
            string cadena2 = Console.ReadLine();
            List<int> valores1 = new List<int>();
            List<int> valores2 = new List<int>();
            List<int> ordenada = new List<int>();
            for (int i = 0; i < cadena1.Length; i++)
            {
                valores1.Add(cadena1[i]);
            }
            for (int i = 0; i < cadena2.Length; i++)
            {
                valores2.Add(cadena2[i]);
            }
            for (int i = 0; i < valores1.Count; i++)
            {
                ordenada.Add(valores1[i]);
            }
            for (int i = 0; i < valores2.Count; i++)
            {
                ordenada.Add(valores2[i]);
            }
            int count = 0;
            for (int i = 0; i < ordenada.Count; i++)
            {
                for (int j = 0; j < ordenada.Count; i++)
                {
                    if (ordenada[count] < ordenada[j])
                    {
                        ordenada.Add(ordenada[j]);
                    }
 
                }
                count++;
            }
 
        }
 
    }
}

pero no hay error de compilación, solo me deja poner los números en las dos veces que se pide por consola, y ya se atasca ahí, aunque yo de a una tecla, no avanza y no ordena nada, por otro lado he descubierto, que si pongo el siguiente código.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
sing System;
using System.Collections.Generic;
using System.Globalization;
 
namespace practicas_ejercicio_5
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Escribre una serie de caracteres numericos: ");
            string cadena1 = Console.ReadLine();
            Console.WriteLine("Escribe otra cadena numerica: ");
            string cadena2 = Console.ReadLine();
            List<int> valores1 = new List<int>();
            List<int> valores2 = new List<int>();
            List<int> ordenada = new List<int>();
            for (int i = 0; i < cadena1.Length; i++)
            {
                valores1.Add(cadena1[i]);
            }
            for (int i = 0; i < cadena2.Length; i++)
            {
                valores2.Add(cadena2[i]);
            }
            Console.WriteLine(valores1[2]);
            Console.ReadKey();
 
        }
 
    }
}
Y escribo en la primera peticion 123456 y lo mismo en la segunda 123456
en vez de devolverme 3, me devuelve el valor 51
¿por que ocurre esto ?
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
sin imagen de perfil
Val: 8
Ha aumentado su posición en 14 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Error al comparar objeto con objeto

Publicado por Andres (4 intervenciones) el 04/04/2019 07:32:29
TE devuelve 51 por el motivo que esta tomando su valor asccii, ya que al tomar una cadena con su indice "cadena1[i]" este toma un solo caracter que es de tipo "char", y al pasarlo a un valor entero "int" entonces se realiza la conversion char a int que es igual a su valor asccii.

Una solucion puede ser convertir el valor char a string y luego entero, asi:
valores1.Add(Convert.ToInt32(cadena1[i].ToString()));

Pero estoy seguro que hay una mejor solución solo que no se mucho.
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

Error al comparar objeto con objeto

Publicado por Sergio (1 intervención) el 10/04/2019 18:12:47
Imagino que lo que necesitas o lo que quieres es guardar dos cadenas de texto dentro de cada una de sus listas de numeros, por lo que te recomiendo que las parsees al tipo de numero del cual sean las listas, luego quieres copiar estas dos listas dentro de otra y quieres tener esta lista ordenada de menor a mayor.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
static void Main(string[] args)
{
 
	Console.WriteLine("Escribre una serie de caracteres numericos: ");
//Almacenas la primera variable de texto
	string cadena1 = Console.ReadLine();
 
	Console.WriteLine("Escribe otra cadena numerica: ");
//Almacenas la segunda variable de texto
	string cadena2 = Console.ReadLine();
//Creas las listas de tipo Integer
	List<int> valores1 = new List<int>();
 
	List<int> valores2 = new List<int>();
 
	List<int> ordenada = new List<int>();
//Recorres cada caracter de la primera cadena de texto y lo conviertes a Integer almacenandolo depues en la lista 1
	foreach (char c in cadena1)
 
	{
 
		valores1.Add(int.Parse(c.ToString()));
 
	}
//Recorres cada caracter de la segundacadena de texto y lo conviertes a Integer almacenandolo depues en la lista 2
	foreach (char c in cadena2)
 
	{
 
		valores2.Add(int.Parse(c.ToString()));
 
	}
//Recorres cada item de la lista 1 y lo copias a la lista 3
	foreach (int i in valores1)
 
	{
 
		ordenada.Add(i);
 
	}
//Recorres cada item de la lista 2 y lo copias a la lista 3
	foreach (int i in valores2)
 
	{
 
		ordenada.Add(i);
 
	}
 
//Ordenas la lista sobreescribiedo esta por la ordenada, diciendole lista3. ordenar donde x es x y lo pasas a lista
	ordenada =ordenada.OrderBy(x => x).ToList();
//recorres cada item de la lista ya ordenada y la imprimes en la consola
	foreach(int i in ordenada)
	{
		Console.Write(i);
	}
 
	Console.Read();
 
}

Espero haberte ayudado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar