Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

JamesD

Passar para string

Mensagens Recomendadas

JamesD    0
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?

Editado por Rui Carlos
GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JamesD    0
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JamesD    0
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)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JamesD    0
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.

Editado por Rui Carlos
GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
twistedx    0
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] + " ");
}

Editado por Rui Carlos
GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JamesD    0
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JamesD    0
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?

Editado por Rui Carlos
GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
twistedx    0
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?

Editado por twistedx

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JamesD    0
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JamesD    0
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
twistedx    0
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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
JamesD    0
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?

Editado por Rui Carlos
GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.