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?
Assim ficou o código:
public static void main(String[] args) {
String str = "TANTOFAZOTEXTO";
int quebraLinhas = 3;
int qtdChar = str.length() / quebraLinhas;
int resto = str.length() % quebraLinhas;
String[] stringFinal = new String[quebraLinhas+1];
int contador = 0;
if (str.length() % quebraLinhas != 0) {
contador = verificaPar(quebraLinhas);
String[] quebra = new String[quebraLinhas+1];
for (int i = 0; i <= str.length()-resto; i += qtdChar) {
if (i == str.length() - resto) {
quebra[i / qtdChar] = str.substring(i, str.length());
} else {
quebra[i / qtdChar] = str.substring(i, i + qtdChar);
}
}
if (contador > 0) {
for (int i = 0; i < contador*2; i += 2) {
for (int j = qtdChar-1; j >= 0; j--) {
char temp = quebra[i].charAt(j);
quebra[i] += temp;
}
quebra[i] = quebra[i].substring(qtdChar, qtdChar*2);
}
}
for (int i = 0; i < resto; i++) {
char temp = quebra[quebra.length-1].charAt(i);
String temp2 = String.valueOf(temp);
if ( i % 2 == 0) {
temp2 = temp + quebra[0];
quebra[0] = temp2;
} else {
quebra[quebra.length-2] += temp2;
}
}
stringFinal = quebra;
} else if (resto == 0) {
contador = verificaPar(quebraLinhas);
String[] quebra = new String[quebraLinhas];
for (int i = 0; i < str.length(); i += qtdChar) {
quebra[i / qtdChar] = str.substring(i, i + qtdChar);
}
if (contador > 0) {
for (int i = 0; i < contador*2; i += 2) {
for (int j = qtdChar-1; j >= 0; j--) {
char temp = quebra[i].charAt(j);
quebra[i] += temp;
}
quebra[i] = quebra[i].substring(qtdChar, qtdChar*2);
}
}
stringFinal = quebra;
}
String palavraFinal = "";
for (int i = 0; i < stringFinal.length; i++) {
String temp = stringFinal[i];
palavraFinal += temp;
}
System.out.println(Arrays.toString(stringFinal));
System.out.println(palavraFinal);
}
public static int verificaPar(int quebraLinhas) {
int contador = 0;
for (int i = 0; i < quebraLinhas; i++) {
if (i % 2 == 0) {
contador++;
}
}
return contador;
}
Em relação a sobra da String, seria assim: A primeira letra da sobra colocada no início da nova palavra que foi formada pelo array, e a segunda letra colocada ao final, assim sucessivamente até que se esgote os caracteres da sobra. Lembrando que também precisa inverter o conteúdo dos índices pares. Ao final de tudo printar a palavra formada.
Tava quase fumaçando já, quando vejo a tua solução, parece a coisa mais simples do mundo. kkkkk. Não desmerecendo tua lógica, claro, mas quero dizer que conseguiu resolver de forma tão simples enquanto eu tava criando um código monstro.
Gosto de ir pegando esses problemas pra tentar resolver, mesmo com código feio e ineficiente mesmo, mas eu vou tentando e vou aprimorando de acordo com os estudos, pra ir evoluindo.
De qualquer forma, agradeço demais tua atenção. Sei que os programadores tem uma vida bem corrida (pelo menos é o que a maioria fala), e tirar um tempo pra vir aqui ajudar a gente que está engatinhando faz toda diferença.