Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

281
Vistas
C# POR QUÉ Array.IndexOf devuelve -1

Empecé a intentar aprender c#.

No entiendo por qué mi uso de Array.IndexOf(); devuelve -1. Quiero que devuelva los números de índice en el alphabet en función de las letras en un nombre de player_name que obtiene de la entrada del usuario. Estoy tratando de recorrer los caracteres del nombre del player_name y capturar el número de índice de ese carácter en el alfabeto.

Echar un vistazo:

 using System; namespace FantasyGame { internal class Program { static void Main(string[] args) { string player_name = null; string[] alphabet = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å" }; Console.Write("\nEnter your name: "); player_name = Console.ReadLine(); string[] password = { }; foreach (char c in player_name) { int index = Array.IndexOf(alphabet, c); Console.WriteLine(Array.IndexOf(alphabet, c)); Console.WriteLine(c); } } } }

Si reemplazo la variable c con un valor de cadena específico como "k" , devuelve el número de índice correcto. ¿Por qué? La ´´´c´´´ tiene un valor de cadena, ¿verdad?

over 4 years ago · Santiago Trujillo
5 Respuestas
Responde la pregunta

0

La c tiene un valor de cadena, ¿verdad?

No, tiene un valor char . Puedes ver eso donde has declarado la variable:

 foreach (char c in player_name)

Hay numerosas correcciones para esto. Sugeriría que lo más simple es hacer que el alphabet sea una cadena y usar string.IndexOf . Alternativamente, para mantener su código lo más similar posible, haga que el alphabet sea char[] , por ejemplo, usando String.ToCharArray :

 char[] alphabet = "abcdefghijklmnopqrstuvwxyzæøåabcdefghijklmnopqrstuvwxyzæøå".ToCharArray();
over 4 years ago · Santiago Trujillo Denunciar

0

Tu c no es un valor de string , es un char

over 4 years ago · Santiago Trujillo Denunciar

0

Reemplazar

 int index = Array.IndexOf(alphabet, c);

con

 int index = Array.IndexOf(alphabet, c.ToString());

ver los documentos oficiales ,

el alphabet es una matriz de cadenas, por lo que debemos pasar una cadena al segundo parámetro de Array.IndexOf

over 4 years ago · Santiago Trujillo Denunciar

0

Esto sucede porque está comparando "c", que es de tipo Char con una letra del alfabeto que es de tipo String . Lo que puede hacer es simplemente cambiar el tipo de matriz que está utilizando a Char[] de esta manera.

 char[] alphabet = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'æ', 'ø', 'å', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'æ', 'ø', 'å' };

También preste atención a las comillas en las que los tipos char usan comillas simples ' ' pero los tipos string usan comillas dobles " " .

over 4 years ago · Santiago Trujillo Denunciar

0

La documentación de MSDN de Array.IndexOf() dice

Busca el objeto especificado y devuelve el índice de su primera aparición en una matriz unidimensional o en un rango de elementos de la matriz.


Ahora en tu código,

  • Si observa de cerca, su matriz alphabet es una matriz de string

  • su código int index = Array.IndexOf(alphabet, c) está tratando de encontrar el valor de char Unicode en una cadena alfabética y es por eso que obtiene -1 como resultado.

  • Para que funcione, el tipo de alphabet y el tipo de c deben ser iguales. Lo mismo en el sentido, si el alfabeto es un char[] entonces c debería ser char.

  • Puedes conseguirlo de dos formas,

    1. Convertir alphabet como una matriz de char
    2. Convertir c en cadena.

Primer enfoque,

 char[] alphabet = "abcdefghijklmnopqrstuvwxyzæøåabcdefghijklmnopqrstuvwxyzæøå".ToCharArray(); int index = Array.IndexOf(alphabet, c); //here alphabet is a type of char array

segundo enfoque,

 string[] alphabet = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "æ", "ø", "å" }; int index = Array.IndexOf(alphabet, c.ToString());
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda