Programa só imprime a ultima posição do registro

O programa so esta imprimindo o ultimo imovel cadastrado

java.util.Scanner;
import javax.swing.JOptionPane;
public class DesafioA {

public static void main(String[] args) {
	class venda{
		String tipo,endereco,bairro,preco;
	}
	class aluguel{
		String tipo,endereco,bairro,preco;
	}
	class imovel{
		String tipo,endereco,bairro;
		String preco;
		int situacao;
		
	}
	Scanner in = new Scanner(System.in);
	int n=0,j=0;
	aluguel[]dadosa=new aluguel[2];
	venda[]dadosv=new venda[2];
	imovel[]dados=new imovel[2];
	for(int i=0;i<dados.length;i++){
		dados[i]=new imovel();
		dados[i].tipo=JOptionPane.showInputDialog("Qual o tipo do imovel?");
		dados[i].endereco=JOptionPane.showInputDialog("Qual o endreço do imovel?");
		dados[i].bairro=JOptionPane.showInputDialog("Qual o bairro do imovel?");
		dados[i].preco=JOptionPane.showInputDialog("Qual o preço do contrato?");
		dados[i].situacao=JOptionPane.showConfirmDialog(null,"o imovel esta a venda?");
		if(dados[i].situacao==JOptionPane.YES_OPTION){
			dadosv[n]=new venda();
			dadosv[n].tipo=dados[i].tipo;
			dadosv[n].endereco=dados[i].endereco;
			dadosv[n].bairro=dados[i].bairro;
			dadosv[n].preco=dados[i].preco;
			n=n++;
		}else{
			dadosa[j]=new aluguel();
			dadosa[j].tipo=dados[i].tipo;
			dadosa[j].endereco=dados[i].endereco;
			dadosa[j].bairro=dados[i].bairro;
			dadosa[j].preco=dados[i].preco;
			j=j++;
		}
	}System.out.println("INFORME A SUA PROCURA 1=Venda, 2=Aluguel");
	int x=in.nextInt();
	if(x ==1){
		for(n=0;n<dadosv.length-1;n++){
			System.out.println(dadosv[n].tipo  + "  |ENDEREÇO|: "+ dadosv[n].endereco  +  dadosv[n].bairro  +"  |Preço|: "+  dadosv[n].preco);
		}
		
	}else{
		for(j=0;j<dadosa.length-1;j++){
			System.out.println(dadosa[j].tipo  + dadosa[j].endereco  + dadosa[j].bairro  + dadosa[j].preco);
		}
	}
	

}

}

Eu mudei os vetores fixos para Arrays dinâmicos, a implementação fica dessa forma:

package classes;

import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JOptionPane;


public class Teste {

private static ArrayList<Imovel> imoveis;

public static void main(String[] args) {
    imoveis = new ArrayList<>();
    Object[] options = {"Sim", "Não"};
    while (true) {
        Imovel imovel = new Imovel();
        imovel.setTipo(JOptionPane.showInputDialog("Qual o tipo do imovel?"));
        imovel.setEndereco(JOptionPane.showInputDialog("Qual o endereço do imovel?"));
        imovel.setBairro(JOptionPane.showInputDialog("Qual o bairro do imovel?"));
        imovel.setPreco(JOptionPane.showInputDialog("Qual o preço do contrato?"));
        imovel.setTipoImovel(javax.swing.JOptionPane.showOptionDialog(null, "Venda ou Aluguel??", "Tipo Imóvel", -1, 2, null, new Object[]{"Venda", "Aluguel"}, 0));
        imoveis.add(imovel);
        if (javax.swing.JOptionPane.showOptionDialog(null, "Gostaria de adicionar mais um imóvel?", "Adicionar mais?", -1, 2, null, options, options[0]) != 0) {
            break;
        }
    }
    while (true) {
        int selecao = javax.swing.JOptionPane.showOptionDialog(null, "Quais imóveis gostaria de listar?", "Adicionar mais?", -1, 2, null, new Object[]{"Venda", "Aluguel", "Sair"}, 0);
        if (selecao != 2) {
            System.out.println((selecao == 0) ? "--Venda--" : "--Aluiguel--"); // é igual fazer "if"
            for (Imovel imovel : imoveis) {
                if (imovel.getTipoImovel() == selecao) {
                    System.out.println(imovel.getEndereco() + ", " + imovel.getBairro() + ", " + imovel.getPreco());
                }
            }
            System.out.println("-------");
        } else {
            break;
        }
    }
}

private static class Imovel {

    private String tipo;
    private String endereco;
    private String bairro;
    private String preco;
    private int tipoImovel; // 0 Venda , 1 Aluguel

    public Imovel() {

    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getPreco() {
        return preco;
    }

    public void setPreco(String preco) {
        this.preco = preco;
    }

    public int getTipoImovel() {
        return tipoImovel;
    }

    public void setTipoImovel(int tipoImovel) {
        this.tipoImovel = tipoImovel;
    }

}
}

Eu deixei uma classe separada chamada Imóvel, assim trabalha com um objeto. Coloquei uma variável do tipo int que define se é aluguel ou venda, isso porque os campos são os atributos são os mesmos, assim só trata o qual você quer listar no final. O looping permite adicionar quantos imóveis quiserem.

Qualquer duvida desse código, só entrar em contato, meu skype esta no meu perfil.