nextLine() não é executado

import java.util.Scanner;

public class aula14e3 {

	public static void main(String[] args) {
		int[] cadeira = new int[10];
		int reserva;
		String opcao="S";
		Scanner t = new Scanner (System.in);
		
		for (int i=0 ; i<10 ; i++) {
			cadeira[i] += i+1;
			System.out.print("[" + cadeira[i] + "]");
		}
		System.out.println("\n-------------------------------");
		
		do {
			System.out.print("Reservar a cadeira: ");
			reserva = t.nextInt();
			reserva -= 1;
			if (cadeira[reserva] != 0) {
				cadeira[reserva] = 0;
			} else {
				System.out.println("ERRO: cadeira já reservada!");
			}
			System.out.println("\n-------------------------------");
			for (int i=0 ; i<10 ; i++) {
				System.out.print("[" + cadeira[i] + "]");
			}
			System.out.println("\n-------------------------------");
			System.out.print("Deseja reservar outra cadeira? [S/N] ");
			opcao = t.nextLine();
		} while (opcao == "S");
	}

}

O comando opcao = t.nextLine(); logo acima do while não é executado, ele pula e já termina o programa, já tentei várias formas como != “N”, começar a variável com S ou com N e nada funcionou.

Está sendo executado sim!
O problema é que você tem um nextInt(), lá na segunda linha do do/while.
Desta maneira, você lê a opção numérica, mas deixa o “\n” (referente ao enter que o usuário pressiona para confirmar o número informado) “na fila” para ser lido. Quando o código encontra a instrução t.nextLine(), este já faz uma verificação na tal fila e, como existe algo lá, captura, sem dar chances para o usuário digitar qualquer coisa.

Sendo assim, você precisa trocar o teu nextInt() por nextLine() e converter o valor para inteiro utilizando o Integer e o método valueOf() ou parseInt().

Obrigado, em todo caso pra agilizar aqui criei outro Scanner, agora deu certo, mas não sei pq não está terminando o programa quando digito N, ele só continua.

import java.util.Scanner;

public class aula14e3 {

	public static void main(String[] args) {
		int[] cadeira = new int[10];
		int reserva;
		String opcao="S";
		Scanner t = new Scanner (System.in);
		Scanner o = new Scanner (System.in);
		
		for (int i=0 ; i<10 ; i++) {
			cadeira[i] += i+1;
			System.out.print("[" + cadeira[i] + "]");
		}
		System.out.println("\n-------------------------------");
		
		do {
			System.out.print("Reservar a cadeira: ");
			reserva = t.nextInt();
			reserva -= 1;
			if (cadeira[reserva] != 0) {
				cadeira[reserva] = 0;
			} else {
				System.out.println("ERRO: cadeira já reservada!");
			}
			System.out.println("\n-------------------------------");
			for (int i=0 ; i<10 ; i++) {
				System.out.print("[" + cadeira[i] + "]");
			}
			System.out.println("\n-------------------------------");
			System.out.print("Deseja reservar outra cadeira? [S/N] ");
			opcao = o.nextLine();
		} while (opcao != "N");
	}

}

Para se comparar strings o certo é utilizar o equals então ficaria (!“N”.equals(opcao)) lembrando que ele só vai cair fora caso o valor informado for N maiúsculo.

tem razão, agora funcionou.
Obrigado galera.