Witam, chciałem poćwiczyć sobie zastosowanie słowa static w metodach i polach i napisałem prosty program, który zapisuje temperaturę, ustawia jednostkę (F, C) i ewentualnie zamienia jednostki. Zastanawiam się, czy w dobry sposób zrobiłem metody statyczne (czy powinny jednak być non-static) i czy ogólnie są jakieś błędy w kodzie, albo cos co mógłbym poprawić, żeby kod był czytelniejszy?
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
Menu menu = new Menu();
try {
menu.checkWeather(input);
} catch (InputMismatchException e) {
System.out.println("Podano zły znak!");
}
}
}
class Weather {
private final double temperature;
static char unit = '0';
Weather(double temperature) {
this.temperature = temperature;
}
static double converterFtoC(double temperatureF) {
unit = 'C';
double temperatureC;
temperatureC = (double)5 / 9 * (temperatureF - 32);
return temperatureC;
}
static double converterCtoF(double temperatureC) {
unit = 'F';
double temperatureF;
temperatureF = temperatureC * 1.8 + 32;
return temperatureF;
}
static void setUnitF() {
unit = 'F';
}
static void setUnitC() {
unit = 'C';
}
}
class Menu {
private double temperature;
void checkWeather(Scanner input) {
System.out.print("Jaka jest dzisiaj pogoda? ");
temperature = input.nextDouble();
Weather weather = new Weather(temperature);
menu(input);
}
void menu(Scanner input) {
int choice;
do {
System.out.println("Co chesz zrobić?");
System.out.println("1. Ustawić jednostkę na stopnie C");
System.out.println("2. Ustawić jednostkę na stopnie F");
if (Weather.unit == 'C' || Weather.unit == 'F') {
System.out.println("3. Zamienic z C na F");
System.out.println("4. Zamienic z F na C");
}
System.out.println("Wyjśc z programu (wpisz 0)");
System.out.print("Twoj wybor: ");
choice = input.nextInt();
switch (choice) {
case 1:
Weather.setUnitC();
System.out.println(STR."Dzisiaj jest \{temperature} stopni \{Weather.unit}");
break;
case 2:
Weather.setUnitF();
System.out.println(STR."Dzisiaj jest \{temperature} stopni \{Weather.unit}");
break;
case 3:
System.out.print(STR."Pomyślnie zamieniono \{temperature} stopni \{Weather.unit} na ");
temperature = Weather.converterCtoF(temperature);
System.out.println(STR."\{temperature} stopni \{Weather.unit}");
break;
case 4:
System.out.print(STR."Pomyślnie zamieniono \{temperature} stopni \{Weather.unit} na ");
temperature = Weather.converterFtoC(temperature);
System.out.println(STR."\{temperature} stopni \{Weather.unit}");
break;
default:
choice = 0;
break;
}
} while (choice != 0);
}
}