Organização de saídas

4 respostas
java
L

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.

4 Respostas

S

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.

L

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.

S

A ideia era pôr o %n no final das suas String e não no início.

H

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…

Criado 13 de novembro de 2021
Ultima resposta 16 de nov. de 2021
Respostas 4
Participantes 3