Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

PinkzOrd

transformar string em array

Recommended Posts

PinkzOrd

Preciso de agarrar em números de uma string(letras e numeros) , dividir por um inteiro, quando o resto for 0 tenho que inseri-los num array (divisores).

o inteiro=n;

a String s;

public void guardaDivisores(String s)
{
	int[] k = new int[10];
	int j=0;
	Scanner sc = new Scanner(s);

try{
	for(int i=0; i<s.length();i++){
		k[i]=sc.nextInt();

	}
}
	catch(Exception a){}

sc.close();


for(int i=0;i<10;i++)
	{
	System.out.print(" "+k[i]); //Teste
	try
	{
	if (n%k[i]==0)
		divisores[j++]=k[i];
		}
		catch(ArithmeticException a)
		{}

	}
}

Tenho isto mas quando a string chega a uma letra pára.

help? :thumbsup:

Share this post


Link to post
Share on other sites
brunoais

Começa por tirar as exceções. Não precisas disso para essas situações em particular.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
PinkzOrd

Se tiro as exceções, se tiver um 0 na string dá-me logo erro.

Mas o a minha duvida mesmo e como fazer o sc.nextInt() ignorar characters  em vez de parar o ciclo.

ja tentei com o while(s.hasNext())

mas vai dar á mesma coisa.

Alguem tem alguma sugestao please?

por exemplo:

input

n=26

String s = "4 -2 25 abc 2 6";

output

4 -2 25 0 0 0 0 0 0 0                  //teste para que valores entram no k[]

[-2, 0, 0, 0, 0, 0, 0, 0, 0, 0]

no output devia tar

[-2, 2, 0, 0, 0, 0, 0, 0, 0, 0]

Share this post


Link to post
Share on other sites
brunoais

Ele está a lançar exceção qd corres isso?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
PinkzOrd

lançar exceção, como assim?

Ele ao dividir por 0, a exceção corre e continua.

Nos characters é que não faz nada, não percebo porque  🤔

Share this post


Link to post
Share on other sites
brunoais

Aconselho-te a aprender Java primeiro. Erros principais:

A exceção ArithmeticException é uma exceção que é suposto nunca ser apanhada.

A exceção feita pelo scanner não é tratada, isso está errado.

Depois de aprenderes Java volta e ajudamos-te. A possível solução que tens aí, não é solução.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
PinkzOrd

Epa estou a aprender. Só coloquei aqui uma duvida. Se quiseres ajudar ajudas, mas não é preciso responder logo assim  😳

Share this post


Link to post
Share on other sites
brunoais

Hum... devo ter sido muito bruto, desc, então...

De qq modo não há volta a dar. O que precisas não é tanto como resolver esse problema. É mais: Como é que se programa em Java: Técnicas de programação, especialmente, como usar as exceções em Java.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
PinkzOrd

encontrei a solução :

public void guardaDivisores(String s)
{	
	int[] v = new int[10];
	int i=0, j=0;
	boolean cont=true;;
	Scanner scanner = new Scanner(s);
	do{		
		try 
			{
				while(scanner.hasNext())
					v[i++]=scanner.nextInt();
					scanner.close();
					cont=false;
			} 
			catch (InputMismatchException e)
				{
				scanner.next();    
				}
	}while(cont);

	for(i=0;i<10;i++)
	{
		try
		{
			if (n%v[i]==0)
			divisores[j++]=v[i];
		}
		catch(ArithmeticException a)
			{
			}
		}
	}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.