Нужна помощь в оформлении при выводе значений и округления их в консоль java
Ниже представлен код программы и скрин вывода
Программа сама работает только вот не могу реализовать красивое оформление и округление до двух знаков.
Помогите решить проблемы.
Заранее спасибо!!!
Main.java
------------
package com.company;
import java.io.*;
import java.util.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Scanner in = new Scanner(System.in);
Scanner in; int counter;
Complex[] st = null;
boolean fail = true;
try {
do{
System.out.println("Введите: ");
System.out.println("1 - Ввод списка чисел и запись в файл");
System.out.println("2 - Чтение списка чисел из файла");
System.out.print(">");
in = new Scanner(System.in);
counter = in.nextInt();
if (counter == 1){
fail = false;
st = new Complex[1];
for (int i = 0; i<st.length; i++){
st[i] = new Complex();
st[i].input();
}
BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\Complex.txt"));
for (int i=0 ; i<1; i++){
st[i].diskOut(bw);
}
bw.close();
}
if (counter ==2 ){
fail = false;
System.out.print("Введите имя файла: ");
in = new Scanner(System.in);
String file_name = in.nextLine();
BufferedReader br = new BufferedReader(new FileReader(file_name));
st = new Complex[1];
for (int i = 0; i < 1; i++)
{
st[i] = new Complex();
st[i].diskIn(br);
}
br.close();
}
}
while(fail);
Arrays.sort(st);
System.out.println("Список чисел: ");
System.out.printf("%-20s%-20s%-20s%-30s\n","Число mRe","Число mIm","Модуль комплексного числа:","Комплексное число, обратное заданному:");
for (int i=0; i< 1;i++)
st[i].output();
}
catch (InputMismatchException e){ System.out.println("Это НЕ число!!!" + e);}
catch (NumberFormatException e){ System.out.println("Ошибка чтения из файла " + e);}
catch (Exception e) { System.out.println(e);}
}
}
-------------------------
Complex.java
-------------------------
package com.company;
import java.util.*;
import java.io.*;
class Complex {
private double mRe; // Действительная часть
private double mIm; // Мнимая часть
public Complex(double mRe, double mIm) {
this.mRe = mRe;
this.mIm = mIm;
}
public Complex() {
this.mRe = 0;
this.mIm = 0;
}
public void input() {
Scanner in = new Scanner(System.in);
System.out.println("Введите действительную часть числа: ");
mRe = in.nextDouble();
System.out.println("Введите мнимую часть числа: ");
mIm = in.nextDouble();
}
public void output() {
String str = String.format("%-20s%-20s%-20s%-20s\n",mRe, mIm, abs(), getReciprocal());
System.out.println(str);
}
public double abs() {
double ar = 0;
ar = Math.sqrt(mRe * mRe + mIm * mIm);
return ar; // Модуль комплексного числа z=x+i*y определяется выражением |z| = sqrt(x^2+y^2).
}
// Для комплексного числа z обратное ему будет иметь вид: 1/z = x/(x^2+y^2) - i*y/(x^2+y^2)
public Complex getReciprocal() {
double denominator = mRe*mRe + mIm*mIm;
if (denominator != 0) {
return new Complex(mRe/denominator, -mIm/denominator);
} else {
System.out.printf("Некоректные значения для нахождения комплексного число, обратного к заданному\n\t", mRe, mIm);
throw new IllegalStateException("z = 0"); // метод исключения
}
}
public void diskOut(BufferedWriter bw) throws Exception {
bw.write(mRe + "\r\n");
bw.write(mIm + "\r\n");
}
public void diskIn(BufferedReader br) throws Exception{
mRe = Integer.parseInt(br.readLine());
mIm = Integer.parseInt(br.readLine());
}
@Override
public String toString() {
return "Re = " + mRe + ", Im = " + mIm;
}
}
Ответы (1 шт):
Автор решения: стасевич
→ Ссылка
double value = 34.766674;
System.out.printf("%.3f",value); //34.766
double value = 34.766674;
String result = String.format("%.3f",value);
System.out.print(result);// 34,767
