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.
Dentro do if o objeto só existe lá, correto?
Se o problema é esse, basta declarar o array fora do if
, não precisa criar outro.
Se for para quebrar a string em partes iguais, basta pegar substrings de tamanho fixo, em vez de pegar um caractere de cada vez. E também dê nomes melhores para as variáveis, porque isso ajuda mais do que parece:
String str = "SERAQUESOBRA";
int partes = 3; // dividir a string em 3 partes iguais
int tamanho = str.length() / partes; // tamanho de cada parte
String[] quebra = new String[partes]; // array com as partes
if (str.length() % partes == 0) {
for (int i = 0; i < str.length(); i += tamanho) {
quebra[i / tamanho] = str.substring(i, i + tamanho);
}
System.out.println(Arrays.toString(quebra));
} else {
System.out.printf("Não é possível dividir em %d partes iguais\n", partes);
}
// como eu declarei o array fora do if, consigo usar aqui se for preciso
Assim, o array quebra
terá "SERA", "QUES" e "OBRA".
Mas tem uma coisa que não ficou claro no enunciado:
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.
Se a string for "TANTOFAZOTEXTO" e x
for igual a 3, então teríamos as partes:
- "TANT"
- "OFAZ"
- "OTEX"
E a sobra seria "TO", mas não entendi essa regra de "colocada no inicio e no fim da String resultante de forma alternada". Como ficaria o resultado final?