#java #exception
#java #исключение
Вопрос:
Я знаю, что эта ошибка возникает, когда мы пытаемся уменьшить значения, но в моем коде я не могу определить, куда я уменьшил значения.
class TestClass {
public static void main(String args[] ) throws Exception {
TestDemo obj=new TestDemo();
TestDemo2 obj1= new TestDemo2();
obj.show(5);
obj1.show("helloworld");
}
}
class TestDemo{
public void show(short N){
System.out.println(N*2);
}
}
class TestDemo2{
public Void show(String S){
System.out.println(S);
}
}
Комментарии:
1. можете ли вы добавить к этому трассировку стека?
2. @Buzzet OP не может этого сделать, поскольку проблема заключается в ошибке компилятора, а не в ошибке времени выполнения.
3. Вопрос стиля — есть ли какая-либо причина объявлять параметр ‘show’ как ‘short’, а не ‘int’? В этом примере это кажется чрезмерно специфичным.
4. ‘int’ здесь бы сработал, но поскольку значение для N может быть ограничено в пределах ‘short’, поэтому я попробовал с short, который выдал ошибку
Ответ №1:
Эта ошибка возникает из-за obj.show (5).
Два исправления, которые вы можете выполнить в любом:
class TestClass {
public static void main(String args[] ) throws Exception {
TestDemo obj=new TestDemo();
TestDemo2 obj1= new TestDemo2();
obj.show((short)5);
obj1.show("helloworld");
}
}
class TestDemo{
public void show(short i){
System.out.println(i*2);
}
}
class TestDemo2{
public void show(String S){
System.out.println(S);
}
}
Вторая версия
class TestClass {
public static void main(String args[] ) throws Exception {
TestDemo obj=new TestDemo();
TestDemo2 obj1= new TestDemo2();
obj.show(5);
obj1.show("helloworld");
}
}
class TestDemo{
public void show(int i){
System.out.println(i*2);
}
}
class TestDemo2{
public void show(String S){
System.out.println(S);
}
}
Ответ №2:
Попробуйте изменить short N
, в public void show(short N)
с test Demo
на int
.
Ответ №3:
попробуйте сначала привести int.
obj.show((short)5);
Ответ №4:
Число 5 по умолчанию обрабатывается как целое число, которое передается методу с коротким аргументом.
obj.show((short)5);
Также для дальнейшего использования ошибки java, а также исключения очень подробны, с указанием точного номера строки, в которой возникла проблема. Это должно помочь вам определить сегмент кода, в котором проблема.
Комментарии:
1. Немного странное «для дальнейшего использования», которое вы туда добавили — отсутствие приведения означает, что это ошибка времени компиляции. Трассировки стека не имеют отношения к этому вопросу. Вы могли бы также дать несколько советов о ловле нахлыстом 😉
2. Тем не менее, ошибка компилятора идентифицирует номер строки.