#java
#java
Вопрос:
Я изо всех сил пытаюсь вывести сообщение об ошибке на консоль при вызове метода GetCurrent() в моем методе print(). Кроме того, в моем методе GetCurrent() компилятор говорит, что мне нужно вернуть double . Я не понимаю проблему двойного возврата, не должен ли блок try catch обернуться вокруг вызова GetCurrent() .
Метод GetCurrent:
public double getCurrent() throws IllegalStateException{
//check if element
try{
if(isCurrent() == true){
return data[cursor];
}else{
throw new IllegalStateException
("No Element");
}//end check
}//end try
catch(IllegalStateException e){
//print error message to console
System.out.println(e.getMessage());
}//end catch
}//end method
Метод IsCurrent():
public boolean isCurrent(){
if(cursor < manyItems){
return true;
}else{
return false;
}
}//end method
метод print():
public void print(){
double answer;
System.out.println(" Capacity = " data.length);
System.out.println(" Length = " manyItems);
System.out.println(" Current Element = " getCurrent());
System.out.print("Elements: ");
for(int i = 0; i < manyItems; i ){
answer = data[i];
System.out.print(answer " ");
}//end loop
System.out.println(" ");
}//end method
основной метод (не может быть скорректирован):
DoubleArraySeq x = new DoubleArraySeq();
System.out.println("sequence x is empty");
x.print();
System.out.println("Trying to get anything from x causes an exceptionn");
System.out.printf("%5.2f", x.getCurrent());
Правильный вывод:
последовательность x пуста
вместимость = 10
длина = 0
Нет Элемента
элементы:
Попытка получить что-либо от x вызывает исключение
Ответ №1:
public double getCurrent() throws IllegalStateException{
//check if element
try{
if(isCurrent() == true){
return data[cursor];
}else{
throw new IllegalStateException("No Element");
}//end check
}//end try
catch(IllegalStateException e){
//print error message to console
System.out.println(e.getMessage());
}//end catch
}//end method
Ты ловишь свой собственный throws IllegalStateException
. удалите свой try{}catch(){}
public double getCurrent() throws IllegalStateException{
//check if element
if(isCurrent() == true){
return data[cursor];
}else{
throw new IllegalStateException("No Element");
}//end check
}//end method
основные:
try{
DoubleArraySeq x = new DoubleArraySeq();
System.out.println("sequence x is empty");
x.print();
System.out.println("Trying to get anything from x causes an exceptionn");
System.out.printf("%5.2f", x.getCurrent());
}catch(IllegalStateException e){
System.err.println("This exception produce because there is no element");
}
Комментарии:
1. Теперь я получаю сообщение об ошибке от Java: Exception в потоке «main» java.lang. Исключение IllegalStateException: нет элемента в DoubleArraySeq.GetCurrent(DoubleArraySeq.java:144) в DoubleArraySeq.print(DoubleArraySeq.java:202) в DoubleArraySeqDemonstration.main(DoubleArraySeqDemonstration.java:48) Вместо сообщения об ошибке «нет элемента», выводимого на консоль.
2. Это правильно. Вам нужно попробовать{}catch(){} сейчас в основном или при вызове
getCurrent()
, я добавлю его в свой ответ3. Я переместил ваш try{}catch(){} в метод печати, поскольку я не могу настроить main. Я также переключил .err на .out, и он работает, за исключением одной проблемы. Поскольку я не могу настроить основной код, x.GetCurrent() выдает ошибку Java, о которой я упоминал в моем предыдущем ответе. Я предполагаю, что единственный способ решить проблему — это что-то в методе GetCurrent(). В недоумении, как это решить.
4. Я действительно не понимаю, что вы пытаетесь сделать. Но каждый раз, когда вы вызываете
getCurrent()
, вы должны помещать его в try catch, чтобы Java не выводила исключение.5. Если основной метод не улавливает исключение, и вы не можете изменить основной метод, а основной метод вызывает метод, который генерирует исключение: вы ничего не можете сделать. Java завершит работу и выведет не перехваченное исключение на консоль.