2014-02-21 3 views
0

Я думаю, что я нашел, в чем проблема. И я думаю, что мой код терпит неудачу, когда я пытаюсь заменить значение в массиве другим значением из другого массива. Я использую цикл for, а затем обнаруживаю «i», индекс, и я пытаюсь заменить одно значение в одном массиве. В индексах есть некоторое смешение, но я не могу понять это!Заменить символ со значением в массиве символов

Что ниже, насколько я пришел.

Есть несколько норвежских слов, но не позволяйте им путать вас. И я должен сказать вам, что я пытаюсь сделать игру в палач.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page 
{ 
char [] arrayOrd; 
char[] bokstav; 
char[] byggeOrd; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    //Session for remembering what word is gonna be guessed 
    if (Session["arrayOrd"] != null) 
    { 
     arrayOrd = (char[])Session["arrayOrd"]; 
    } 
    //This session contains the underscores 
    if (Session["byggeOrd"] != null) { 
     byggeOrd = (char[])Session["byggeOrd"]; 
    } 
} 
protected void Page_Unload(object sender, EventArgs e) 
{ 
    Session["arrayOrd"] = arrayOrd; 
    Session["byggeOrd"] = byggeOrd; 

} 

protected void btnStart_Click(object sender, EventArgs e) 
{ 
    string ord = txtOrd.Text.ToLower(); 
    arrayOrd = ord.ToCharArray();//Puts text from a textbox to an array called arrayOrd 
    List<char> list = new List<char>(); 
    for (int i = 0; i < arrayOrd.Length; i++) {//Put underscores for as long arrayOrd is in a list. 
     labRiktigBokstav.Text += "_ "; 
     list.Add('_'); 
    } 
    byggeOrd = list.ToArray(); //Put's the list that contains underscores in an array 

} 
//Checking if a letter is in the word 
protected void btnSjekkOrd_Click(object sender, EventArgs e) 
{ 
    string BSjekk = txtBokstavSjekk.Text.ToLower(); 
    bokstav = BSjekk.ToCharArray(); 
    if (arrayOrd.Contains(bokstav[0])) 
    { 
     for (int i = 0; i < arrayOrd.Length; i++) 
     { 
      if (arrayOrd[i] == bokstav[0]) 
      { 
       byggeOrd[Array.IndexOf(byggeOrd, byggeOrd[i])] = arrayOrd[i]; //I think there is something wrong here!!!!! 
       string resultat = new string(byggeOrd); 
       labRiktigBokstav.Text = resultat; 
      } 
     } 

    } 
    else 
    { 
     //Print out that the guessed letter is wrong 
    } 
} 
} 
+0

Эта линия является избыточным: byggeOrd [Array.indexOf (byggeOrd, byggeOrd [я])]. Вы получаете индекс значения через свой индекс. Вы можете заменить его byggeOrd [i]. Какие именно результаты вы получаете и чего хотите достичь? – rla4

+0

@ rla4 Извините, это вполне может быть ответом на дальнейший осмотр. Ваш ответ был сформулирован так, как будто это было просто предложение о пересмотре кода, а не ответ на этот вопрос. – TyCobb

+0

У меня есть массив с символами подчеркивания: '_', '_'. И если пользователь угадает букву справа, индекс этого подчеркивания и индекс слова, который пользователь угадывает, будут заменены. Поэтому, если слово «автомобиль». И пользователь угадывает a, я хочу изменить «_», ** «_» **, «_» на «a». Мои результаты заключаются в том, что индексы не совпадают. Угаданные буквы не помещаются в нужный индекс и затем ошибочны. Если пользователь догадывается «c», то «r», а затем «a». Он будет отображаться как: cra, а не автомобиль. – Norveger

ответ

1

Следующая строка является неправильным:

byggeOrd[Array.IndexOf(byggeOrd, byggeOrd[i])] 

Вы получаете индекс значения по самому индексу.

int ind = Array.IndexOf(byggeOrd, byggeOrd[i]); 

Код, указанный выше, может извлекать любой индекс. Вот почему он может изменить непреднамеренное значение. Вы должны заменить его

if (arrayOrd[i] == bokstav[0]){ 
    byggeOrd[i]= arrayOrd[i]; 
} 
Смежные вопросы