На данный вопрос уже ответили:
Есть программа с наследованием, состоящая из Main, Skelet, Podklass. Сама программа очень громоздкая, поэтому бросаю ее часть.
Есть 2 ученика. Выводится массив из их имен. Подключаем Scanner, вписываем любое из этих имен. По выбранному ученику выводятся обе его оценки и средний балл. Вот только средний балл возвращает округленное до целого числа значение. Как сделать округление хотя бы до десятых? Не могу понять, где ошибка, хоть рельс и много.
Скелет:
public class Skelet {
String im;
int ocenka1;
int ocenka2;
double SrBall;
public Skelet(String im, int ocenka1, int ocenka2, double srBall) {
this.im = im;
this.ocenka1 = ocenka1;
this.ocenka2 = ocenka2;
this.SrBall = srBall;
}
public String getIm() {
return im;
}
public int getOcenka1() {
return ocenka1;
}
public int getOcenka2() {
return ocenka2;
}
public double getSrBall() {
return SrBall = (ocenka1 + ocenka2)/2;
}
}
Подкласс:
public class Podklass extends Skelet {
public Podklass(String im, int ocenka1, int ocenka2, double SrBall) {
super(im, ocenka1, ocenka2, SrBall);
}
}
Main:
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
int i;
double sb=0;
Podklass uch1 = new Podklass("Дмитрий", 4,3, sb);
Podklass uch2 = new Podklass("Максим", 5,4, sb);
String[] mass = {uch1.getIm(), uch2.getIm()};
for (i=0; i<mass.length; i++){
System.out.println(mass[i]); // Выводим массив из имен
}
Scanner in = new Scanner(System.in);
do {
System.out.println("");
System.out.println("Введите имя ученика: ");
String name = in.nextLine();
for (i = 0; i < mass.length; i++) {
if (name.equals(mass[0])) {
System.out.println(uch1.getIm() + " " + uch1.getOcenka1() + " " + uch1.getOcenka2() + " " + uch1.getSrBall());
break;
}
if (name.equals(mass[1])) {
System.out.println(uch2.getIm() + " " + uch2.getOcenka1() + " " + uch2.getOcenka2() + " " + uch2.getSrBall());
break;
}
else {
break;
}
}
}
while (mass.length==2);
}
}
В этом фрагменте кода:
(ocenka1 + ocenka2)/2
все операнды являются целочисленными, поэтому здесь происходит целочисленное деление. Результатом целочисленного деления является целое число.
Если в результате целочисленного деления получилось число с плавающей точкой, то происходит усечение (truncation) частного – дробная часть отбрасывается.
Решить проблему можно явным приведением типа, например, так:
(double) (ocenka1 + ocenka2)/2
или так:
(ocenka1 + ocenka2)/(double) 2
или так:
(ocenka1 + ocenka2)/2d
или таким образом:
(ocenka1 + ocenka2)/2.
Кстати, тип double
здесь излишен, в этой ситуации вполне хватит float
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите пожалуйста как составить regexp для такой строки /utils/add/message? таких /действие может быть сколько угодно
Подскажите наиболее простую, надежную и наиболее "синхронную" схему взаимодействия Компонента с GUI и ServiceВ ИНЕТЕ описано много схем, но, как...