Zuerst ich Ihnen den völlig falschen Ansatz lassen sagen. Dies ist die schmutzig, schnellste fix, dass ich tun kann:
static void Main(string[] args)
{
String username;
String password;
int row;
string[,] accnts = { { "jack", "111", "1" }, { "ibo", "121", "2" } };
Console.Write("enter username >> ");
username = Console.ReadLine();
Console.Write("enter password >> ");
password = Console.ReadLine();
for (row = 0; row < 3; row++)
{
if (username.Equals(accnts[row, 0]) && password.Equals(accnts[row, 1]))
{
Console.WriteLine("welcome " + accnts[row, 0]);
}
else if (username.Equals(accnts[row, 0]) && password.Equals(accnts[row, 1]))
{
Console.WriteLine("welcome " + accnts[row + 1, 0]);
}
else
{
Console.WriteLine("invalid access");
// changed break to continue, because it was crashing
continue;
}
string[,] question_id = { { "1", "1" }, { "1", "2" }, { "2", "3" }, { "2", "4" } };
string[,] questions = { { "Türkiyenin baskenti neresidir?", "1" }, { "Baskomutan kim?", "2" }, { "2 kere 2?", "3" }, { "when did the world war 1 start?", "4" } };
string[,] Answers = { { "a)ankara b)istanbul c)izmir", "1" }, { "a)ismet b)Atatürk c)Ali ", "2" }, { " a)1 b)2 c)4 ", "3" }, { " a)1912 b)1914 c)1915", "4" } };
string[,] trueAnswers = { { "a", "1" }, { "b", "2" }, { "c", "3" }, { "c", "4" } };
int result = 0;
string answers = "";
// here I've added a start and end thingy to offset the loop acording to logged user.
int start = 0;
int endModifier = 2;
if (username == accnts[1,0])
{
start = 2;
endModifier = 0;
}
for (int i = start; i < questions.GetLength(0) - endModifier; i++)
{
Console.WriteLine(questions[i, 0]);
Console.WriteLine("--------------------------");
for (int y = 0; y < Answers.GetLength(0); y++)
{
if (Answers[y, 1] == questions[i, 1])
{
Console.WriteLine(Answers[y, 0]);
answers = Console.ReadLine();
for (int z = 0; z < trueAnswers.GetLength(0); z++)
{
if (trueAnswers[z, 1] == questions[i, 1])
{
if (trueAnswers[z, 0] == answers)
result = result + 10;
Console.WriteLine("total is " + result);
}
}
}
}
}
if (result < 20)
{
Console.WriteLine("failed");
}
else
{
Console.WriteLine("congrats");
}
return;
}
}
Natürlich kann man der beste Ansatz wollte es tun, werde ich OOP verwenden (objektorientierte Programmierung) Zuerst werde ich einige Hilfsklassen erstellen eine interne Klasse für Konto ...
class Account
{
public string UserName { get; set; }
public string Password { get; set; }
public int Group { get; set; }
}
eine interne Klasse für Ihre Frage::
class Question
{
public string QuestionText { get; set; }
public List<Answer> AnswersList { get; set; }
}
Und finnaly ein A die Daten in halten nswer Frage uns mit der Logik zu helfen, etwas:
class Answer
{
public string AnswerText { get; set; }
public bool IsCorrect { get; set; }
public string AcceptableLetter { get; set; }
}
diese Klassen Füllung ist einfach, es ist fast das gleiche, als Ihr Beispiel, aber mit mehr poliert Namen. Liste ist dein Freund hier, alle Konten im Feld speichern kann, aber ohne die lästigen Indizes https://msdn.microsoft.com/cs-cz/library/6sh2ey19(v=vs.110).aspx#Anchor_8
List<Account> accountsList = new List<Account>();
accountsList.Add(new Account { UserName = "jack", Password = "111", Order = 1 });
accountsList.Add(new Account { UserName = "ibo", Password = "121", Order = 2 });
Es ist auch eine gute Lang Code in kleine Methoden zu spalten, so dass diese Methode überprüft, ob die angegebenen Benutzernamen und Passwort richtig und gibt wahr oder falsch zurück.
private static bool CheckUserPassword(List<Account> accountsList, string username, string password)
{
foreach (Account account in accountsList)
{
if (account.UserName == username)
{
if (account.Password == password)
{
Console.WriteLine("welcome " + account.UserName);
return true;
}
else
{
Console.WriteLine("invalid access");
return false;
}
}
}
return false;
}
Mit Konten aus dem Weg habe, habe ich auch eine Methode, um alle Antworten im Quiz zu füllen, wo man deutlich sehen kann, wie weitere Frage hinzufügen, wenn nötig:
private static List<Question> FillQuestions()
{
List<Question> questionList = new List<Question>();
List<Answer> answerList = new List<Answer>();
answerList.Add(new Answer { AnswerText = "Ankara", IsCorrect = true, AcceptableLetter = "a" });
answerList.Add(new Answer { AnswerText = "Istambul", IsCorrect = false, AcceptableLetter = "b" });
answerList.Add(new Answer { AnswerText = "Izmir", IsCorrect = false, AcceptableLetter = "c" });
questionList.Add(new Question { QuestionText = "Türkiyenin baskenti neresidir?", AnswersList = answerList });
answerList = new List<Answer>();
answerList.Add(new Answer { AnswerText = "ismet", IsCorrect = false, AcceptableLetter = "a" });
answerList.Add(new Answer { AnswerText = "Atatürk", IsCorrect = true, AcceptableLetter = "b" });
answerList.Add(new Answer { AnswerText = "Ali", IsCorrect = false, AcceptableLetter = "c" });
questionList.Add(new Question { QuestionText = "Baskomutan kim?", AnswersList = answerList });
answerList = new List<Answer>();
answerList.Add(new Answer { AnswerText = "1", IsCorrect = false, AcceptableLetter = "a" });
answerList.Add(new Answer { AnswerText = "2", IsCorrect = false, AcceptableLetter = "b" });
answerList.Add(new Answer { AnswerText = "4", IsCorrect = true, AcceptableLetter = "c" });
questionList.Add(new Question { QuestionText = "2 kere 2?", AnswersList = answerList });
answerList = new List<Answer>();
answerList.Add(new Answer { AnswerText = "1912", IsCorrect = false, AcceptableLetter = "a" });
answerList.Add(new Answer { AnswerText = "1914", IsCorrect = true, AcceptableLetter = "b" });
answerList.Add(new Answer { AnswerText = "1915", IsCorrect = false, AcceptableLetter = "c" });
questionList.Add(new Question { QuestionText = "When did the world war 1 start?", AnswersList = answerList });
return questionList;
}
Und mit diesem Rahmen implementieren könnten Sie einfach die Fragen sind, die durch das Hinzufügen Eigenschaft Klasse Frage:
class Question
{
public string QuestionText { get; set; }
public List<Answer> AnswersList { get; set; }
// added property
public int DesiredGroup { get; set; }
}
und Zuordnung, die Fragen für welche Gruppe in FillQuestions sind() -Methode: // code ... questionList.Add (neue Frage {QuestionText = "Wann hat der 1. Weltkrieg begonnen?", AnswersList = answerList, DesiredGroup = 2}); // Code ...
und dann Filtern jeder Frage in Frage Schleife:
if (questions[i].DesiredGroup == accountsList.Find(x => x.UserName == username).Group)
{
continue;
}
Der wenn vielleicht etwas kompliziert, aber die Alternative ist CheckUserPassword Methode Return-Konto haben, oder es Parameter haben aus .. Das sind ziemlich viele Informationen, also lasse ich es so wie es ist.
nun der fertige Code sieht wie folgt aus:
static void Main(string[] args)
{
List<Account> accountsList = new List<Account>();
accountsList.Add(new Account { UserName = "jack", Password = "111", Group = 1 });
accountsList.Add(new Account { UserName = "ibo", Password = "121", Group = 2 });
Console.Write("enter username >> ");
string username = Console.ReadLine();
Console.Write("enter password >> ");
string password = Console.ReadLine();
if (CheckUserPassword(accountsList, username, password))
{
List<Question> questions = FillQuestions();
int result = 0;
for (int i = 0; i < questions.Count; i++)
{
if (questions[i].DesiredGroup == accountsList.Find(x => x.UserName == username).Group)
{
continue;
}
Console.WriteLine();
Console.WriteLine(questions[i].QuestionText);
Console.WriteLine("--------------------------");
WriteAnswers(questions[i].AnswersList);
string answers = Console.ReadLine();
for (int j = 0; j < questions[i].AnswersList.Count; j++)
{
if (questions[i].AnswersList[j].AcceptableLetter == answers)
{
if (questions[i].AnswersList[j].IsCorrect)
{
Console.WriteLine(questions[i].AnswersList[j].AcceptableLetter + " is correct");
result += 10;
}
else
{
Console.WriteLine(questions[i].AnswersList[j].AcceptableLetter + " is incorrect");
}
}
}
}
if (result < 15)
{
Console.WriteLine("failed");
}
else
{
Console.WriteLine("congrats");
}
}
Console.Read();
}
private static void WriteAnswers(List<Answer> answersList)
{
char[] alphabetLetters = { 'a', 'b', 'c' };
for (int i = 0; i < answersList.Count; i++)
{
Console.WriteLine(alphabetLetters[i] + ") " + answersList[i].AnswerText);
}
}
private static List<Question> FillQuestions()
{
List<Question> questionList = new List<Question>();
List<Answer> answerList = new List<Answer>();
answerList.Add(new Answer { AnswerText = "Ankara", IsCorrect = true, AcceptableLetter = "a" });
answerList.Add(new Answer { AnswerText = "Istambul", IsCorrect = false, AcceptableLetter = "b" });
answerList.Add(new Answer { AnswerText = "Izmir", IsCorrect = false, AcceptableLetter = "c" });
questionList.Add(new Question { QuestionText = "Türkiyenin baskenti neresidir?", AnswersList = answerList, DesiredGroup = 1 });
answerList = new List<Answer>();
answerList.Add(new Answer { AnswerText = "ismet", IsCorrect = false, AcceptableLetter = "a" });
answerList.Add(new Answer { AnswerText = "Atatürk", IsCorrect = true, AcceptableLetter = "b" });
answerList.Add(new Answer { AnswerText = "Ali", IsCorrect = false, AcceptableLetter = "c" });
questionList.Add(new Question { QuestionText = "Baskomutan kim?", AnswersList = answerList, DesiredGroup = 1 });
answerList = new List<Answer>();
answerList.Add(new Answer { AnswerText = "1", IsCorrect = false, AcceptableLetter = "a" });
answerList.Add(new Answer { AnswerText = "2", IsCorrect = false, AcceptableLetter = "b" });
answerList.Add(new Answer { AnswerText = "4", IsCorrect = true, AcceptableLetter = "c" });
questionList.Add(new Question { QuestionText = "2 kere 2?", AnswersList = answerList, DesiredGroup = 2 });
answerList = new List<Answer>();
answerList.Add(new Answer { AnswerText = "1912", IsCorrect = false, AcceptableLetter = "a" });
answerList.Add(new Answer { AnswerText = "1914", IsCorrect = true, AcceptableLetter = "b" });
answerList.Add(new Answer { AnswerText = "1915", IsCorrect = false, AcceptableLetter = "c" });
questionList.Add(new Question { QuestionText = "When did the world war 1 start?", AnswersList = answerList, DesiredGroup = 2 });
return questionList;
}
private static bool CheckUserPassword(List<Account> accountsList, string username, string password)
{
foreach (Account account in accountsList)
{
if (account.UserName == username)
{
if (account.Password == password)
{
Console.WriteLine("welcome " + account.UserName);
return true;
}
else
{
Console.WriteLine("invalid access");
return false;
}
}
}
return false;
}
class Account
{
public string UserName { get; set; }
public string Password { get; set; }
public int Group { get; set; }
}
class Question
{
public string QuestionText { get; set; }
public List<Answer> AnswersList { get; set; }
public int DesiredGroup { get; set; }
}
class Answer
{
public string AnswerText { get; set; }
public bool IsCorrect { get; set; }
public string AcceptableLetter { get; set; }
}
Es gibt immer bessere Ansätze, aber für jetzt genügt :) Glückliche
Codierung
Wenn Sie * mehr * Benutzer hat, schlage ich sie so gut wie qustions setzen und Antworten in eine * Datenbank * –
Ja, Sie haben Recht, aber da ich 2D-Arrays erkunde, habe ich nur 2 verschiedene Benutzer definiert und wollte es mit Arrays tun – vinjakci
Haben Sie irgendwas versucht? Deine Frage ist zu weit gefasst. Die offensichtliche Antwort lautet: "Finde heraus, mit welchem Benutzer du es zu tun hast, und frag ihnen dann nur die Fragen, die du ihnen stellen willst". Aber es gibt viele verschiedene Möglichkeiten, dies zu tun. Wenn Ihr Code einen Versuch zeigt, der nicht funktioniert, müssen Sie genau erklären, woran Sie Probleme haben. Was macht der Code, was willst du stattdessen und was _speziell_ kannst du nicht zur Arbeit bringen? Wenn Ihr Code die "Vorher" -Version ist und nicht versucht, das Problem zu lösen, sind Sie noch nicht bereit, eine Frage zu stellen. –