/** 03.06.2020
* Lesson2.10_Count_CONSTRUCTOR_Artifact
* Т.З: https://javarush.com/groups/posts/1949-znakomstvo-s-klassami-napisanie-sobstvennihkh-klassov-konstruktorih
*Музей древностей.
* Твоя задача — спроектировать класс Artifact.
*
* Артефакты, которые хранятся в музее, бывают трех видов.
*
* Первый — о которых неизвестно ничего, кроме порядкового
* номера, присвоенному музеем (например: 212121).
* Второй — о которых известен порядковый номер и культура,
* которой он был создан (например: 212121, "Ацтеки").
* Третий вид — о которых известен порядковый номер,
* культура, которой он был создан, и точный век его
* создания (например: 212121, "Ацтеки", 12).
*
* Создай класс Artifact, описывающий хранящиеся в музее
* древности, и напиши необходимое количество конструкторов
* для него. В методе main() создай по одному артефакту
* каждого вида.
*/
public class Artifact {
int number;
String civilization;
byte century;
static int count=0;
/** count++ -добавлять после каждого созданного
* объекта/конструктора, для подсчета общего количества.
* и в конце выводится на экран System.out.print(count)**/
// Третий тип
public Artifact(int number, String civilization, byte century){
this.number = number;
this.civilization = civilization;
this.century = century;
count ++;
}
// Второй тип
public Artifact(int number, String civilization){
this.number = number;
this.civilization = civilization;
count ++;
}
// Первый тип
public Artifact(int number){
this.number = number;
count ++;
}
public static void main(String[] args) {
Artifact artifact1 = new Artifact(100001, "Aztecs", 12);
Artifact artifact2 = new Artifact(100002, "Aztecs");
Artifact artifact3 = new Artifact(100003);
System.out.println ("Number= " + artifact1.number + " Civilization= " + artifact1.civilization + " Century= " + artifact1.century);
System.out.println ("Number= " + artifact2.number + " Civilization= " + artifact2.civilization);
System.out.println ("Number= " + artifact3.number);
System.out.println ("Total Artifact= " + count);
}
}
Тарасенко Андрей
3 уровень
Почему выкидывает ошибку в строке где используется "byte", если заменить на "int" все работает. Что я не понимаю?
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
JustinianJudge в Mega City OneMaster
4 июня 2020, 09:19решение
Если ты напишешь вот так:
то будет работать.
Пока что нужно запомнить следующее, если тебе явно не скажут делать поле byte (что очень сложно представить) то поле класса делаешь int, или другим типом, которым скажут в условии.
byte это тип данных, который занимает 1 байт ( 8 бит), то есть, в нем может поместиться 2^8 (два бита в восьмой степени - на количество бит) 256 вариантов.
В джаве байт знаковый (есть минус, есть плюс) и диапазон значений:
Нельзя поместить в тип байт значения ВНЕ диапазона, они просто не влезут. Как в Ладу калину не влезет грузовой контейнер.
Идем дальше, у тебя было написано так:
по умолчанию, любой целочисленный (без дробной части) литерал (обычное число в джава коде),
то есть:
во всех этих случаях, когда джава видит целочисленное число в коде, она его считает типом int по умолчанию.
Тип int занимает 4 байта (32 бита), и его диапазон (2^32) это
И тут компилятор начинает выполнять твою программу и видит:
то есть ты, передаешь в конструктор 12, и это тип int, то есть там вполне могло быть число 2000000.
А конструктор принимает тип byte , с диапазоном -128..127, и как тогда?
Да, в случае с 12, казалось бы, проблем не будет, в некоторых случаях кстати, компилятор бы такое и пропустил бы, но сам факт, ты пытаешься в багажник легковушки грузовой контейнер передать.
Один из вариантов я тебе дал, это явно преобразовать число в байт:
(byte) 12
+3
Тарасенко Андрей
4 июня 2020, 21:59
Точно!
1) Спасибо что напомнил "во всех этих случаях, когда джава видит целочисленное число в коде, она его считает типом int по умолчанию."
Читал об этом, но вот сейчас понял)))
2) Спасибо что показал как именно указывать если именно нужен "byte"
Artifact artifact1 = new Artifact(100001, "Aztecs", (byte) 12);
+1