Array Index is Out of Range

All right, I’m sorry for a question like this but I’ve searched long and hard for the error in my code and I’m stumped. I’ve been told the error is at line 145 and 71.

    	public int whichQuestion;
	public int spaceBetweenQuestions = 100;
	
	private string [,] choices;
	private char [] answers;
	private string [] bonusQuestions;
	private bool [] wereQuestionsUsed;
	private bool popEnable = false;	
	private bool didValueChange = true;
	private bool? didAnswerCorrect = null;
	private char? letterPressed;
	private bool canAnswerQuestion = false;
	
	// Use this for initialization
	void Start () {
			
		int x;
		
		choices = new string [3, 4];
		bonusQuestions = new string [3];
		wereQuestionsUsed = new bool [3];
		answers = new char [3];

		letterPressed = null;
		
		for (x = 0; x < 3; x++) {
			
			wereQuestionsUsed [x] = false;
		}
		
		//Bonus questions that the player can answer for extra points.  This line also assigns lines for the questions and answers.
	}
	
	void OnGUI (){
		
		int x;
		
		if (popEnable){ // Error in the line below this
			GUI.Box (new Rect (Screen.width * 0.05f , Screen.height * 0.05f, Screen.width * 0.9f, Screen.height * 0.9f), 
			         "Bonus Trivia!

" +
"Press the letter of the correct answer!
" +
bonusQuestions [whichQuestion - 1] +
"
");

			wereQuestionsUsed [whichQuestion - 1] = true;
			
			for (x = 0; x < 4; x++){
				
				GUI.Label (new Rect (Screen.width * 0.05f + 5, (Screen.height * 0.05f) + (spaceBetweenQuestions * (x + 4)),
				                     Screen.width * 0.9f - 10, 60),
				           choices [whichQuestion - 1, x]);
			}
			
			canAnswerQuestion = true;
		}
		
		if (didAnswerCorrect == true){
			
			popEnable = false;
			GUI.Box (new Rect (Screen.width *0.25f, Screen.height * 0.3f, Screen.width * 0.75f, Screen.height * 0.7f),
			         "Congratulations!

" +
“You have answered correctly!”);

			didAnswerCorrect = null;
		}
		else if (didAnswerCorrect == false){
			
			popEnable = false;
			GUI.Box (new Rect (Screen.width *0.25f, Screen.height * 0.3f, Screen.width * 0.75f, Screen.height * 0.7f),
			         "Sorry!

" +
“You have answered incorrectly!” +
“Better luck next time!”);

			didAnswerCorrect = null;
		}
	}
	
	void OnTriggerEnter (Collider otherObject){
		
		if (otherObject.tag == "Player"){
			
			popEnable = true;
			didValueChange = false;
		}
	}
	
	// Update is called once per frame
	void Update () {
		
		if (popEnable && !didValueChange){
			whichQuestion = (int) Random.Range (0.1f, 3.0f);
			didValueChange = true;
			
			if (canAnswerQuestion){
				
				if (Input.GetKeyDown ("a")){
					letterPressed = 'a';
					canAnswerQuestion = false;
				}
				else if (Input.GetKeyDown ("b")){
					letterPressed = 'b';
					canAnswerQuestion = false;
				}
				else if (Input.GetKeyDown ("c")){
					letterPressed = 'c';
					canAnswerQuestion = false;
				}
				else if (Input.GetKeyDown ("d")){
					letterPressed = 'd';
					canAnswerQuestion = false;
				}
			}
			if (letterPressed == answers [whichQuestion - 1]) //Error in this line
				didAnswerCorrect = true;
			else if (letterPressed != answers [whichQuestion - 1])
				didAnswerCorrect = false;
		}
	}

I apologize if this code seems a little long as I included everything I thought might be needed. Any help or feedback is greatly appreciated. Thank you!

In every line where you use

someArray[whichQuestion - 1]

you should instead use

someArray[whichQuestion]

and in this line

whichQuestion = (int) Random.Range (0.1f, 3.0f);

you should use

whichQuestion = Random.Range (0, answers.Length);

This should prevent the errors you are reporting.