Jump to content
JamesD

Passar para string

Recommended Posts

JamesD

Boas pessoal, estou com uma problema, é o seguinte : tenho que receber n números do utilizador e apresentar os números numa linha, e após isso é necessário analisar os números 1 por 1.

O que eu tenho feito:

for( int i = 1; i <= m; i++){
 int num = scan.nextInt();
}

Isto apresenta os números na vertical, mas o objectivo é apresentar na horizontal, não sei como fazer isto, pensei em usar

System.out.print(num);

mas isso repete os números, e eu tava a pensar em guardar os números numa String e ir analisando as posições, não sei se me expliquei direito, se sim, alguma ideia?

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

o teu primeiro código não parece ser de apresentar mas sim de pedir.

afinal qual é o objectivo ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JamesD

o teu primeiro código não parece ser de apresentar mas sim de pedir.

afinal qual é o objectivo ?

Pedir ao utilizador números, com esses números preencho uma linha, e depois tenho que analisar esses números, se são maiores do que 15 ou menor que 1:

Exemplo:

Introduza os números:

16 10 09 13 19 20 ( os meus números devem estar na horizontal, os meus ficam na vertical)

Depois ir analisando números a numero, nesta parte eu estava a pensar em usar strings, assim iria verificar posição a posição.

Exemplo:

O nº na posição 1 é invalido.

Share this post


Link to post
Share on other sites
HappyHippyHippo

se os teus números ficam na vertical é porque carregas na tecla ENTER, já experimentaste não carregar ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JamesD

Se eu não carregar no Enter irá permitir o utilizador introduzir muitos numeros, e após introduzir os numeros eles ficam todos os juntos, fica assim, exemplo:

O utilizador introduz:

10 05 03 13 15 19 28 17 20 18

Após carregar no enter fica assim:

1005031315 ( seleciona apenas 5 numeros, apresenta-os em linha sem espaços)

Share this post


Link to post
Share on other sites
HappyHippyHippo

ora vamos lá a ver.

primeiro dizes que o problema é que os números são apresentados na vertical.

apresentas um código de leitura de dados.

vens então afinal dizer que o problema é que andas a inserir o ENTER na leitura dos valores.

agora vens dizer que apesar de inserir os números como é pedido (tudo de uma vez sem carregar no ENTER), sai um resultado qualquer.

isto tudo com um título de tópico sem nexo no que é exposto.

apresentas o teu código, os dados de entrada no formato esperado e os dados de saída no formato esperado, ou vamos continuar a dançar o vira ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JamesD

Peço desculpa por não me estar a expressar como deve ser e pelo titulo.

O pretendido é o seguinte : pedir ao utilizador o nº de colunas, depois voltar a pedir para inserir os números ( o numero de números inseridos deve ser igual ao nº de colunas) após apresentar a linha dos numeros, devo verificar os números.

O que eu tenho:

Scanner scan = new Scanner(System.in);
System.out.println("Quantas colunas? ");

int m = scan.nextInt();
System.out.println("Linha 1 :");

for( int i = 1; i <= m; i++){

 int num = scan.nextInt();
System.out.println(num);

}

O esperado seria algo assim:

"Quantas colunas?"

5

Linha 1:

10 5 8 19 4

O 4º valor é invalido (Eu deveria apresentar esta mensagem após analisar todos os numeros, mas para eu fazer isto eu teria que passar os numeros para String, e ir analisando as posições).

Tens esse System.out .print() dentro ou fora do ciclo?

Dentro.

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
twistedx

Se queres apresentar os números seguidos não podes usar System.out.println(). Esse "ln" faz-te parágrafo. Da forma que estás a fazer, estás a inserir o número, a apresentá-lo mal o inseres e a fazer parágrafo. Imediatamente depois o programa pede-te para inserires um novo número. Logo, não estás a fazer o que queres...

Se esse for o enunciado ele não te obriga a colocar os números num string. Isso dá-te mais trabalho do que usares um vetor.

Vê se percebes este código (não sei se já sabes trabalhar com vetores ou não):

Scanner scan = new Scanner(System.in);
System.out.println("Quantas colunas? ");

int m = scan.nextInt();
int vecAux[] = new int[m]; //crias um vetor auxiliar
System.out.println("Linha 1: ");
for (int i = 0; i < m; i++) {
 int num = scan.nextInt();
 vecAux[i] = num; //conforme corres o ciclo vais preenchendo o vetor criado com os números introduzidos
}

//Corres o vetor e apresentas os números com System.out.print()
for (int i = 0; i < vecAux.length; i++) {
 System.out.print(vecAux[i] + " ");
}

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
JamesD

Não podemos usar vetores, eu pensei em usar uma string, pois é a unica maneira que eu penso que dê para ir verificando os números posição a posição, sem usar vetores. Passava os numeros inteiros para uma string.

O que tenho que fazer é :

Pedir números, apresentar os números na horizontal e depois ver cada numero, se é maior do 15 ou menos do que 1, não consigo sair desta parte.

Share this post


Link to post
Share on other sites
HappyHippyHippo

Pedir números, apresentar os números na horizontal e depois ver cada numero, se é maior do 15 ou menos do que 1, não consigo sair desta parte.

olha bem para o que escreveste :

- Pedir números

- apresentar os números na horizontal

- e depois ver cada numero, se é maior do 15 ou menos do que 1

são partes diferentes do processo descrito, logo isto não faz sentido:

Scanner scan = new Scanner(System.in);
System.out.println("Quantas colunas? ");

int m = scan.nextInt();
System.out.println("Linha 1 :");

for( int i = 1; i <= m; i++){
 int num = scan.nextInt();
 System.out.println(num); // <----- o que é que isto está a fazer no código do primeiro ponto ???
}

se são passos diferentes, então separa o código


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JamesD

Caramba, tou só a fazer porcaria.

Scanner scan = new Scanner(System.in);
System.out.println("Número de colunas: 1-15? ");

int m = scan.nextInt();

System.out.println("Linha 1 :");

for( int i = 1; i <= m; i++){
 int num = scan.nextInt();
}

Até aqui peço os números, e o utilizador os introduz, certo?

Agora como é que eu posso verificar esses números? Passando eles para uma string?

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
twistedx

O que tu estás a fazer está mal, porque mal tu introduzes um número estás automaticamente a perde-lo. Pensa bem: entras no ciclo (i = 1) e introduzes um número. Até aqui tudo bem, mas quando o ciclo volta a correr (i = 2), voltas a inicializar uma variável "num" e a colocar um número aí dentro. Então e o anterior para onde foi?

Se queres introduzir os números numa string vais ter que inicializar uma (FORA DO CICLO FOR) e a cada vez que o ciclo corre vais acrescentando o número a essa string. E vais separando os números com ponto e vírgula ou espaço para depois poderes retirar esses números da string.

Diz-me uma coisa, podes verificar os números antes de os apresentar?

Edited by twistedx

Share this post


Link to post
Share on other sites
HappyHippyHippo

pelos visto ainda não vai lá sem dizer explicitamente como é:

import java.util.Scanner;

public class main {
   public static void main(String[] args) {
       Scanner scan = new Scanner(System.in);

       // pedir o número de colunas
       int ncolunas = 0;
       try {
           System.out.print("Qaul o número de colunas ? > ");
           System.out.flush();
           ncolunas = scan.nextInt();
           scan.nextLine();
       } catch (Exception excep) {
           System.err.println("Erro de leitura do número de colunas : " + excep.getMessage());
           System.exit(-1);
       }

       // ler os valores das colunas
       int lista[] = new int[ncolunas];
       try {
           System.out.print("Insira os valores das colunas > ");
           System.out.flush();

           // ler a linha com os valores e guardaos no array
           int i = 0;
           for (String entry : scan.nextLine().split(" ")) {
               if (i < ncolunas) {
                   lista[i] = Integer.parseInt(entry);
               }
               i++;
           }

           // validar o número de valores lidos
           if (i != ncolunas) {
               System.err.println("A quantidade de números escritos não equivale com o número de colunas");
               System.exit(-1);
           }
       } catch (Exception excep) {
           System.err.println("Erro de leitura dos números a processar : " + excep.getMessage());
           System.exit(-1);
       }

       // apresentar os números
       for (int i = 0; i < ncolunas; i++) {
           System.out.print(lista[i]);
           System.out.print(" ");
       }
       System.out.println();

       // do whatever
   }
}


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JamesD

Obrigado, mas não é isso, o que tu tens no teu código é muito avançado para mim, ainda não dei o try/catch e os vetores, logo não posso usar, eu não sei como chegar lá, após o utilizador introduzir os dados, pegar nesses dados e fazer a verificação.

o m é o colunas
for( int i = 1; i <= m; i++){
   int num = scan.nextInt();

 }
String s = Integer.toString(num);
Agora faria um ciclo para ir verificando as posições, com o charAt.

Share this post


Link to post
Share on other sites
HappyHippyHippo

ainda não dei o try/catch e os vetores

1º - lembra-me de nunca te contratar. lá porque nunca te explicaram uma coisinha qualquer dizes logo que não podes usar é a última desculpa que alguém aceita.

1.1º - não interessa se desta a matéria ou não. até porque apresentar uma solução melhor com recursos que não foram dados demonstra curiosidade e investigação, COISAS QUE FAZEM A DIFERENÇA ENTRE 16 E 20 !!!

2º - eu não usei nenhum vector

3º - eu não reconheço nenhuma solução meio amanhada, logo não irei aconselhar nada que não seja, no mínimo, semelhante ao código que apresentei


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JamesD

Entendeste mal, é um problema para entregar e é nos avisado que não poderemos usar o que não foi leccionado até agora, não é questão de não querer aprender.

De qualquer das formas, muito obrigado pela tua ajuda, irei analisar novamente o codigo que postaste, e tentar arranjar uma solução.

Share this post


Link to post
Share on other sites
twistedx

A única solução que eu arranjo é caso tu possas verificar os números antes de os mostrares na consola.

Dessa forma verificas um número e adicionas à string, verificas outro número e adicionas à string, e por aí em diante e só no fim mostras a string.

E outra coisa que eu já te disse à um bocado e tu parece que não deste atenção: esse teu System.out.println() não vai apresentar resultado nenhum. O "num" foi inicializado dentro do ciclo for, logo fora do ciclo não tens acesso à variável. Já experimentaste meter esse código no IDE que usas? O compilador não te dá erro?

Share this post


Link to post
Share on other sites
JamesD

Estava a compilar como estava, mas sim, o S.O.P não fazia nada, retirei ele.

Vou tentar da maneira que tu disseste.

Share this post


Link to post
Share on other sites
JamesD

System.out.println("Número de colunas? ");

int m = scan.nextInt();

System.out.println("Linha 1 :");

for( int i = 1; i <= m; i++){
sb.append(scan.nextInt());
sb.append(" ");

}
String s = sb.toString();
// enviar o "s" para um metodo e verificar;
}

}

Como posso verificar essa string, pois ela vai ter espaços, e eu so quero os numeros, não posso usar vetores, logo não consigo usar o split do stringbuilder, alguem tem ideias?

Edited by Rui Carlos
GeSHi

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

×
×
  • Create New...

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.