Q:

Converter números romanos em Java

Fiz um programa que converte números inteiros para números romanos em Java, mas o programa não executa. 
O que pode ser?
Segue o código:
import java.util.Scanner;

public class Teste {

    public static void main(String[] args) {

        Scanner teclado = new Scanner(System.in);

        int numero, i;
        int vaNum[]= {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};

        String vaRom[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};

        while(true){

            numero = teclado.nextInt();
            if(numero == 0)
                break;
            System.out.printf("%-4d", numero);
            i=0;
            while(numero>0){
            if(numero >= vaNum[i]){
                System.out.println(vaRom[i]);
                numero = numero - vaNum[i];
            }
            }

        }
    }

A:

Você esqueceu de incrementar o i dentro do while interno quando o número não pode ser subtraído. Isso faz com que esse while interno seja infinito.
Também havia uns pequenos problemas de usar System.out.println ao invés de System.out.print, o que acrescentaria quebras-de-linha após cada caractere.
Veja aqui o seu código corrigido:
import java.util.Scanner;

class Teste {

    public static void main(String[] args) {

        Scanner teclado = new Scanner(System.in);

        int[] vaNum = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};

        String[] vaRom = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};

        while (true) {

            int numero = teclado.nextInt();
            if (numero == 0) break;
            System.out.printf("%-4d ", numero);
            int i = 0;
            while (numero > 0) {
                if (numero >= vaNum[i]) {
                    System.out.print(vaRom[i]);
                    numero -= vaNum[i];
                } else {
                    i++;
                }
            }
            System.out.println();
        }
    }
}

Dado esta entrada:
4999
237
88
23
0

Ele produz esta saída:
4999 MMMMCMXCIX
237  CCXXXVII
88   LXXXVIII
23   XXIII

Veja aqui funcionando no ideone.

