Boa noite!
Fiz o seguinte programa:
import java.util.Scanner;
public class areaTrianguloRetangulo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner entrada = new Scanner(System.in);
System.out.println ("qual o valor da base?");
String base = entrada.next().replace(",", ".");
Double base1 = Double.parseDouble(base);
System.err.printf("%f -> %.2f", base1, base1);
System.out.println ("qual o valor da altura?");
String altura = entrada.next().replace(",", ".");
Double altura1 = Double.parseDouble(altura);
System.err.printf("%f -> %.2f", altura1, altura1);
double resultado = (base1 * altura1)/2;
System.out.println(resultado);
entrada.close();
}
}
O programa funciona, porém a resposta fica toda bagunçada, exemplo:
(Os que estão em negrito são os valores de entrada)
qual o valor da base?
2
qual o valor da altura?
2,000000 -> 2,008
8,000000 -> 8,008.0
Como consigo arrumar? Já tentei muitas formas fuçando no código, mas não saio do lugar.
Ao invés de next
utilize nextLine
e põe um %n
nos seus printf
para fazer a quebra de linha antes de ler uma nova entrada.
Obrigado pela resposta, porém não consegui resolver.
Coloquei os comandos conforme você falou e também coloquei “\n” nas perguntas das entradas.
O código ficou assim:
import java.util.Scanner;
public class areaTrianguloRetangulo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner entrada = new Scanner(System.in);
System.out.println ("qual o valor da base?");
String base = entrada.nextLine().replace(",", ".");
Double base1 = Double.parseDouble(base);
System.err.printf("%n %f -> %.2f", base1, base1);
System.out.println ("\n qual o valor da altura?");
String altura = entrada.nextLine().replace(",", ".");
Double altura1 = Double.parseDouble(altura);
System.err.printf("%n %f -> %.2f", altura1, altura1);
double resultado = (base1 * altura1)/2;
System.out.println("\n" + resultado);
entrada.close();
}
}
Quanto mais eu tento arrumar, mais confuso fica.
A ideia era pôr o %n
no final das suas String e não no início.
Você colocou vários \n
nos println
, isso faz com que ele pule mais linhas do que gostaria (se entendi bem, afinal, vc não diz exatamente como deveria ser a saída - quantas linhas é pra pular em cada caso, etc).
Bom, pra ajudar, lembre-se de alguns detalhes:
-
println
adiciona uma quebra de linha no final
- cada
\n
pula uma linha (além da linha que println
já adicionará automaticamente)
-
printf
não adiciona a quebra de linha, então vc tem que colocar explicitamente \n
ou %n
(a diferença é que %n
usa a quebra de linha específica do sistema operacional, ou seja, \n
no Linux, \r\n
no Windows, etc)
Assim você pode organizar melhor a saída (a impressão que tive ao ler o tópico é que vc saiu colocando \n
e %n
aleatoriamente sem entender muito bem o que está acontecendo).
Sendo assim, ficaria (baseado no que acho que é o que vc quer):
Scanner entrada = new Scanner(System.in);
System.out.println("qual o valor da base?");
Double base = Double.parseDouble(entrada.nextLine().replace(",", "."));
System.err.printf("%f -> %.2f%n", base, base);
System.out.println("qual o valor da altura?");
Double altura = Double.parseDouble(entrada.nextLine().replace(",", "."));
System.err.printf("%f -> %.2f%n", altura, altura);
// se só vai imprimir o resultado e não vai usar pra mais nada depois, nem precisa de variável
System.out.println((base * altura) / 2);
Exemplo de saída:
qual o valor da base?
3,5
3.500000 -> 3.50
qual o valor da altura?
5,7
5.700000 -> 5.70
9.975
Vale lembrar também que não é pra fechar o System.in
. Claro que pra programa simples como esse não faz diferença, mas enfim…