Alguém consegue me explicar esse erro? Toda vez em que é para repetir aparece isso:

Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
at java.base/java.lang.String.charAt(String.java:1512)
at FH/FH18.FH__.main(FH__.java:24)

Código:

package FH18;

import java.util.Scanner;

import javax.swing.JOptionPane;

import java.io.IOException;

public class FH__ {
	
	public static void main(String [] args) throws IOException {
		
		Scanner in = new Scanner(System.in);
		
		 final double VALOR_LOCACAO = 800, ACRESCIMO = 100; 
		 final int PESSOAS_KITNET = 3;
		 int qtdeMoradores; 
		 double valorTotal = 0, valorAndarA, valorAndarB, valorAndarC, valorAndarD; 
	     char andar = ' ';
		
		
	     do {
	            System.out.println("Qual a letra do Kitnet? A / B / C / D / G-Fim da alocação / H-Fim  ");
	            andar = in.nextLine().charAt(0);
				andar = Character.toUpperCase(andar);
	            
	            if(andar == 'G' || andar == 'H') {
	                break;
	            }
	            
	            if(andar != 'A' & andar != 'B' & andar != 'C' & andar != 'D') {
	                System.out.println("Kitnet incorreto! ");
	                continue;
	            }
	            
	            if(andar == 'A') {
	                System.out.println("O valor da locação é R$800, passando de 3 pessoas, será acrescentado R$100.");
		            System.out.print("Moradores no andar - A:");
		            qtdeMoradores = in.nextInt();
		            valorAndarA = (qtdeMoradores - PESSOAS_KITNET) * ACRESCIMO + VALOR_LOCACAO;
		            System.out.println("Valor da locação: " + valorAndarA);
		            valorTotal = valorTotal + valorAndarA;
	            }else if(andar == 'B') {
	            	System.out.println("O valor da locação é R$800, passando de 3 pessoas, será acrescentado R$100.");
		            System.out.print("Moradores no andar - B:");
		            qtdeMoradores = in.nextInt();
		            valorAndarB = (qtdeMoradores - PESSOAS_KITNET) * ACRESCIMO + VALOR_LOCACAO;
		            System.out.println("Valor da locação: " + valorAndarB);
		            valorTotal = valorTotal + valorAndarB;
	            }else if (andar == 'C'){               
	            	System.out.println("O valor da locação com 3 pessoas é R$800, passando de 3 pessoas, será acrescentado R$100.");
	                System.out.print("Moradores no andar - C:");
		            qtdeMoradores = in.nextInt();
		            valorAndarC = (qtdeMoradores - PESSOAS_KITNET) * ACRESCIMO + VALOR_LOCACAO;
		            System.out.println("Valor da locação: " + valorAndarC);
		            valorTotal = valorTotal + valorAndarC;
	            }else{
	            	System.out.println("O valor da locação com 3 pessoas é R$800, passando de 3 pessoas, será acrescentado R$100.");
		            System.out.print("Moradores no andar - D:");
		            qtdeMoradores = in.nextInt();
		            valorAndarD = (qtdeMoradores - PESSOAS_KITNET) * ACRESCIMO + VALOR_LOCACAO;
		            System.out.println("Valor da locação: " + valorAndarD);
		            valorTotal = valorTotal + valorAndarD;
	            }	                
	        }while(true);
	        
	     	if(andar == 'G') {
	          System.out.printf("Total da alocação: R$ %.2f", valorTotal);
	          }else {
	            System.out.println("Fim");
		}
			

		}

	}

Para ler do teclado deves usar somente o método nextLine() da classe Scanner. Ao usares o nextInt, vai ser lido o número mas o enter não. E depois o nextLine da repetição lê imediatamente o enter sem mais conteúdo, resultando numa String vazia. E dá o erro que obtens.

Se quiseres continuar a usar o nextInt tens de ler explicitamente os enters que ficam para trás:
qtdeMoradores = in.nextInt();
in.nextLine(); // consome o enter

1 curtida

No caso, teria que trocar por o nextLine?

1 curtida