E aí galera!!!
Este é meu primeiro tópico…e já estou com uma dúvida :!!!
tenho o seguinte problema
1;2;3-10;14;15
precisa retornar um array de int com os numeros que estão no intervalo
ponto e virgula é para entrar os números
e hífen o intervalo
neste caso retorna
1,2,3,4,5,6,7,8,9,10,14,15
eu nem sei como fazer isso…alguém pode me ajudar por favor???
Obrigado!!!
Boa noite…
Especifíque melhor o seu problema…
Ja tem alguma coisa pronta?
posta o que voce fez ate agora…
alexandre, o problema é como vc vai entrar com numeros assim… 1;2;3-10;14;15 tudo de uma vez??? não sei hein…
agora ve se isso é o que vc quer???
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
public class Teste {
public static void main(String[] args) {
char verificador = 'S';
do {
int valorInicial = entrarNumero();
int valorFinal = entrarNumero();
List listaNumeros = guardaArray(valorInicial, valorFinal);
System.out.print(listaNumeros);
verificador = deNovo();
} while (verificador == 'S');
}
private static int entrarNumero() {
return Integer.parseInt(JOptionPane.showInputDialog("Insira o valor inicial"));
}
private static List guardaArray(int valorInicial, int valorFinal) {
List<Integer> listaNumeros = new ArrayList<Integer>();
while (valorInicial <= valorFinal) {
listaNumeros.add(valorInicial);
valorInicial++;
}
return listaNumeros;
}
private static char deNovo() {
return JOptionPane.showInputDialog("Verificar novamente? S/N").charAt(0);
}
}
Tenta resolver o problema quebrando em problemas menores:
-> A String que vc receber de um metodo, voce realizar um split pelo delimitador “;”. Neste ponto, vc tera um array de objeto String, da seguinte forma: [“1”, “2”, “3-10”, “14”, “15”].
-> Feito isso, aonde tiver um Hifen, voce itera comecando da posicao origem (3) ate o destino (10), e vai concatenando (add) numa lista.
-> Por fim, vc transforma essa lista num Array (List.toArray());
Simples, nao!? ![:slight_smile: :slight_smile:](https://www.guj.com.br/images/emoji/twitter/slight_smile.png?v=9)
fiz aqui…
String s = "1;2;3-10;14;15";
String []seguimentos = s.split(";");
LinkedList<Integer> l = new LinkedList<Integer>();
for(int i=0; i < seguimentos.length ; ++i)
{
//se retorma < não achou logo e um int
if(seguimentos[i].indexOf("-")< 0)
l.add(Integer.parseInt(seguimentos[i]));
else {
String []intervalo =seguimentos[i].split("-");
int inicio = Integer.parseInt(intervalo[0]);
int f = Integer.parseInt(intervalo[1]);
System.out.print(inicio);
for(int j=inicio; j <= f ; ++j){
l.add(j);
}
}
}
for(int n: l)
System.out.print(n);
}
haha
tinorberto eu ia fazer exatamente assim, mas como você já postou, um voto na tua classe =)
Vamos lá…
eu tenho essa String 1;2;3-10;14;15
preciso retornar um array de int com os números que estão no intervalo, ou seja, 4,5,6,7,8,9.
ponto e vírgula, trocar apenas por vírgula.
quando o código achar o hífen “-” colocar o intervalo do array nessa String
então teremos o resultado final:
1,2,3,4,5,6,7,8,9,10,14,15.
Está melhor a explicação?
Obrigado a todos que já foram me respondendo, continuo tentando algo aqui (sem sucesso HASUasHuasHu) mas aguardo respostas…
Vlw!!!
Galera, eu fiz isso daqui usando o StringTokenizer, aparece td certo, mas pra transformar isso num array d int preciso de um método mas tá difícil…num manjo mto bem disso…ajuda aeee
public class Numeros {
private static String NUMEROS = "1;2;3-10;14;15";
public static void main(String[] args) {
System.out.println(NUMEROS + "\n");
StringTokenizer aux = new StringTokenizer(NUMEROS.replace(";", ","), "-");
while (aux.hasMoreElements()) {
if (aux.countTokens() <= 1) {
System.out.print(",");
for (int i = 4; i <= 9; i++) {
System.out.print(i + ",");
}
}
System.out.print(aux.nextToken());
}
System.exit(0);
}
Você pode começar lendo a documentação das classes que usa. Por exemplo, na classe StringTokenizer ele diz o seguinte:
Que em resumo quer dizer: “Não use StringTokenizer, no lugar use o split”. E aí ele dá um exemplo, de como usar split.
E o que o split faz? O mesmo que o tokenizer, gerando de lambuja um array.
bom se vc puder retornar um ArrayList vc pode tentar:
//sua string de entrada
String numeros = "1;2;3-10;14;15";
//criar um array de string com o split
String[] stringArray = numeros.split(";", 0);
//sua ArrayList de saida
List<Integer> intArrayList = new ArrayList<Integer>();
ai vc faz um for pelo stringArray e adiciona na sua ArrayList pelo metodo intArrayList.add(valor)
uma dica :idea: vc pode usar o metodo Integer.parseInt(string) pra poder converter e adicionar na ArrayList
ve se vc consegue ![:smiley: :smiley:](https://www.guj.com.br/images/emoji/twitter/smiley.png?v=9)
aew galera, desculpem eu ressucitar este tópico, mas eu consegui fazer o código…para quem quiser está aqui…
import java.util.ArrayList;
import java.util.List;
public class Numeros {
public static void main(String[] args) {
String numero = "1;2;3-10;14;15";
String[] numeroArray = numero.split(";");
String[] intervalo;
List<Integer> arrayInt = new ArrayList<Integer>();
String aux;
int cont1 = 0;
int cont2 = 0;
for (int i = 0; i < numeroArray.length; i++) {
aux = numeroArray[i];
if (aux.indexOf("-") != -1) {
intervalo = aux.split("-");
cont1 = Integer.parseInt(intervalo[0]);
cont2 = Integer.parseInt(intervalo[intervalo.length - 1]);
for (int j = cont1; j <= cont2; j++) {
arrayInt.add(j);
}
}
else {
arrayInt.add(Integer.parseInt(aux));
}
}
System.out.println(arrayInt);
}
}