Tinha postado somente uma síntese, achando que o problema era só referente a expressão "teste[i].length() == 0", mas não era. Já serve pra eu aprender a postar sempre o código todo.
public static void main(String[] args) {
String str = "SERAQUESOBRA";
int x = 3;
int qtdChar = str.length() / x;
int resto = str.length() % x;
String[] quebra1 = null;
if (str.length() % x != 0) {
} else if (resto == 0) {
String[] quebra = new String[x];
for (int i = 0; i < x; i++) {
quebra[i] = " ";
}
for (int i = 0; i < x; i++) {
char temp;
while ( quebra[i].length() == 0 || quebra[i].length() <= qtdChar) {
for (int j = 0; j < qtdChar; j++) {
temp = str.charAt(j);
quebra[i] += String.valueOf(temp);
}
}
}
quebra1 = quebra;
}
System.out.println(quebra1.toString());
}
Pessoal, sei que o código está horrível e totalmente não performático! Mas eu sou iniciante e fico tentando resolver as coisas do jeito que eu sei. Pra depois ver a forma melhor que alguém tenha feito.
O problema era que tinha passado o parâmetro do tamanho da array de forma errada, tinha passado uma variável que era "0".
Agora não tô conseguindo imprimir a String quebra1. Já tentei printa direto o objeto e tentei com o toString como está no código. Ele fica apontando a referência e não o conteúdo do objeto.
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.