Problema com array de inteiros

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:

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:

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);

	}

}