我想我发现了问题所在。当我尝试用另一个数组中的另一个值替换数组中的值时,我认为我的代码失败了。我使用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 :(得分:1)
以下行错误:
byggeOrd[Array.IndexOf(byggeOrd, byggeOrd[i])]
您将通过其索引获取值的索引。
int ind = Array.IndexOf(byggeOrd, byggeOrd[i]);
上面的代码可以检索任何索引。这就是为什么它可以修改一个非预期的价值。你应该用
替换它if (arrayOrd[i] == bokstav[0]){
byggeOrd[i]= arrayOrd[i];
}