Variável String não aceita espaço. Como resolver?

6 respostas
R

Pessoal, quando defino por exemplo uma variável como String e preciso digitar uma informação com espaço simplismente dar erro. Por exemplo:

import java.util.*;

class Pessoa

{

String nome;

double salario;

Pessoa(String nome, doubel salario)

{

this.nome = nome;

this.salario = salario;

}

public void mostrarDados()

{

System.out. println("Nome = "+nome+Salário=+salario);

}

}

public class Teste

{

public static void main(String args[])

{

Scanner tcl = new Scanner(System.in);

System.out.println(Digite o nome e o salário do funcionário);

String n = tcl.next();

double s = tcl.nextDouble();

Pessoa p = new Pessoa(n,s);

p.mostrarDados();

}

} // Obs. Quando digito um nome com espaço por Exemplo: Joseph Smith, dá erro.

// Da mesma forma está acontecendo com a variável do tipo double, se digitar por exemplo: 2.963, dá erro só aceita com no máximo 2 casas decimais.

/// Como resolver esses probleminhas.

6 Respostas

gomesrod

O problema é que o método scanner.next() lê a próxima palavra da entrada (Joseph). Em seguida você chama o nextDouble() para pegar o número, mas na verdade ainda tem uma palavra (Smith). Aí já viu, bagunça tudo…

O mais aconselhável é pegar toda a linha digitada (scanner.nextLine) e a partir desse conteúdo fazer uma interpretação mais esperta.

E mais uma coisa: utilize a tag code! http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

pgioseffi

Tenta isso aqui abaixo:

Classe Pessoa:

public class Pessoa {

	private String nome;
	private double salario;

	public Pessoa() {
		super();
	}

	public Pessoa(final String nomeParam, final double salarioParam) {
		this();
		this.nome = nomeParam;
		this.salario = salarioParam;
	}

	public String getNome() {
		return this.nome;
	}

	public double getSalario() {
		return this.salario;
	}

	public String mostrarDados() {
		return new StringBuilder("Nome = ").append(this.nome)
				.append("\nSalário = ").append(this.salario).toString();
	}

	public void setNome(final String nomeParam) {
		this.nome = nomeParam;
	}

	public void setSalario(final double salarioParam) {
		this.salario = salarioParam;
	}
}

Classe Teste:

import java.util.Scanner;

public class Teste {

	public static void main(final String args[]) {
		final Scanner tcl = new Scanner(System.in);
		System.out.println("Digite o nome do funcionário:");
		final String nome = tcl.nextLine();
		System.out.println("Digite o salário do funcionário:");
		System.out.println(new Pessoa(nome, tcl.nextDouble()).mostrarDados());
	}
}
Roger75

Tente executar com o nome composto entre aspas, por exemplo:
java Teste “Joao da Silva” 1000

R

Pessoal obrigado por me ajudar a resolver o problema com a String. Porém com o tipo double ainda continua.
Quando digito por exemplo: 2.90 dá erro.
Gostaria também de saber se tem alguma maneira de formatar os tipos float e double, ou seja definir a quantidade casas decimais.

Valeu!!

pgioseffi

Usa 2,90.

E pra formatar números use a classe NumberFormat

L

tem esse tbm bem facil de visualizar

http://www.devmedia.com.br/post-7369-Formatando-numeros-com-Numberformat.html

abrxx

Criado 11 de agosto de 2011
Ultima resposta 11 de ago. de 2011
Respostas 6
Participantes 5