achando que o problema era só referente a expressão "teste[i].length() == 0", mas não era.
Sempre que ocorre uma exceção, a mensagem de erro mostra a classe e a linha em que ocorreu. Sempre leia as mensagens e veja o que tem na linha indicada, é por ali que vc começa a investigar o erro.
E para imprimir o array no final, ou vc faz um loop e imprime os elementos um a um:
for (String s : quebra1) {
System.out.println(s);
}
Ou usa a classe java.util.Arrays
(no início do código, faça o import java.util.Arrays;
):
System.out.println(Arrays.toString(quebra1));
Sobre o código, tem um if
vazio que não faz sentido. Se o código está todo no else
, inverta a condição do if
:
if (str.length() % x == 0) {
String[] quebra = new String[x];
// etc...
E a condição do while
é redundante. Se o tamanho for menor que qtdChar
, então é desnecessário testar se é zero (pois zero já é menor que qtdChar
). Então bastaria:
while (quebra[i].length() <= qtdChar) {
for (int j = 0; j < qtdChar; j++) {
// etc...
Também é desnecessário criar o outro array quebra1
. Simplesmente imprima quebra
dentro do if
:
String str = "SERAQUESOBRA";
int x = 3;
int qtdChar = str.length() / x;
if (str.length() % x == 0) {
String[] quebra = new String[x];
for (int i = 0; i < x; i++) {
quebra[i] = " ";
}
for (int i = 0; i < x; i++) {
while (quebra[i].length() <= qtdChar) {
for (int j = 0; j < qtdChar; j++) {
// substring em vez de charAt + String.valueOf
quebra[i] += str.substring(j, j + 1);
}
}
}
// imprime dentro do if
System.out.println(Arrays.toString(quebra));
}
Dito isso, o que é para o código fazer? Só lendo, não dá pra saber, pois o resultado final é um array com a palavra " SERA" 3 vezes (incluindo um espaço no início). Se tiver o enunciado, fica mais fácil pra gente ajudar.
Eu achava que o problema era naquela expressão justamente porque a exceção apontava pra lá. Mas fui lendo o código novamente e em algum momento indentifiquei o erro.
Essa parte de usar a classe Arrays foi ótimo, não sabia dessa parte.
Sobre o if, ainda vou preencher o código, é porque tava na linha de raciocínio (bem ruim por enquanto, kkk), já tinha preenchido a condição nele e fui escrevendo.
Na parte do while foi mais no "desespero", fui testando tudo que podia pra ver se conseguia indentificar o problema dessa exceção. Sabia, mas pela inexperiência, meio que em alguns momentos a gente vai tentando kkkkk.
A questão de criar outro array, é porque eu quero trazer os dados para fora, para depois manipular o objeto fora do if. Dentro do if o objeto só existe lá, correto?
No caso do resultado final, o while vai rodar o segundo for que está dentro dele até que complete a quantidades de caracteres determinada e então volta ao primeiro for e ele passa para o índice 1, para iterar a segunda remessa de caracteres e assim vai até que finalize. Ficando: quebra[0]: "SERA" quebra[1]: "QUES" quebra[2]: "OBRA" Pelo menos essa foi a intenção, e achei que nessa parte tinha acertado. kkkkk.
Peguei essa questão de outro usuário aqui do TabNews. Ele postou que passaram esse teste prático numa entrevista de emprego para dev Sênior. Ele passou como se fosse um grande desrespeito um teste simples desse para um sênior. Então pensei: Se tão testando esse tipo de coisa nas vagas para sênior e o cara tá "esnobando", então deve ser o mínimo que eu teria que saber fazer.
A problemática é:
É passado uma String, exemplo: "TANTOFAZOTEXTO". É passado também um varíavel x, que passa a quantidades de quebra de linha. A String tem que ser dividida por igual entre essas linhas, a sobra, se houver coloca numa outra linha, fora a quantidade x. A sobra de caracteres deve ser colocada no inicio e no fim da String resultante de forma alternada. As strings resultantes nas linhas pares devem ser invertidas. No final formar novamente a String e retornar o valor dela. *Detalhe, o camarada em questão, tinha 10 minutos pra isso.