Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логическая ошибка в исключениях 
:(
    Опции темы
Syltan
Дата 18.6.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Вот написал код:

Код

package u;
public class Main {
final private static int N = 50;
    final private static java.io.BufferedReader jin =
        new java.io.BufferedReader(new java.io.InputStreamReader(System.in));

    private static double min_rad(double x[], double y[], int n)  {
        double min = 0;
        double temp;
        int i;
                for (i = 0; i < n; i++)
               //Если значание темп больше минимума
            if ((temp = Math.sqrt(x[i] * x[i] + y[i] * y[i])) > min)
                    //Тогда минимуму присвоить темп
            min = temp;
        return min; //Вызвать минимум и передать аргументом функции
    }
    public static void main(String[] args) throws java.io.IOException,MyException {
        int n;
            //Объявляю 2 масива которыее могут содержать
            //не более 50 действительных чисел каждый
        double x[] = new double[N],
               y[] = new double[N];
        double radius;
        int i;

        System.out.print("Input n: ");
            //Здесь происходит ввод количества натуральных чисел
        n = Integer.parseInt(jin.readLine());
            //Цикл нужен для того, чтоб каждое число мы вводили с клавиатуры
            try{
        for (i = 0; i < n; i++)
        {
         System.out.print("Input x[" + i + "]: ");
         String str1 = jin.readLine();
                String str2 = jin.readLine();
                if(str1.equals(".") || str1.equals("0")){
                    throw new MyException("Ошибка, вы ввели неверные данные");
                }
                if(str2.equals(".") || str2.equals("0")){
                    throw new MyException("Ошибка, вы ввели неверные данные");
                }

                x[i] = Double.parseDouble(str1);
            System.out.print("Input y[" + i + "]: ");

                y[i] = Double.parseDouble(str2);

        }
            //Вызываю функцию min_rad и присваиваю её значение перменной radius
            radius = min_rad(x, y, n);
            //Вывожу радиус найменьшего круга
            System.out.print("Minimum radius: " + radius);
            }catch(MyException m){
                System.out.println(m.getMessage());
            }

    }

}



Код

package u;
public class MyException extends Exception{
public MyException(){
    super();
};

public MyException(String msg)
{
    super(msg);
};

}



Программа компилируется, но если ввести вначале цифру 2, а затем какую-то цифру программа выбрасывает исключение, не то которое я написал ,а вообще даже если вветси цифру программа выбрасывается.
PM MAIL   Вверх
jk1
Дата 18.6.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Может быть так?
Код

 public static void main(String[] args) throws java.io.IOException {
        int n;
        double min = 0;
        double temp;
        System.out.print("Input n: ");
        //Здесь происходит ввод количества натуральных чисел
        try {
            try {
                n = Integer.parseInt(jin.readLine());
            } catch (NumberFormatException e) {
                throw new MyException("Ошибка, вы ввели неверные данные");
            }
            //Цикл нужен для того, чтоб каждое число мы вводили с клавиатуры
            for (int i = 0; i < n; i++) {
                System.out.print("Input x[" + i + "]: ");
                String str1 = jin.readLine();
                System.out.print("Input y[" + i + "]: ");
                String str2 = jin.readLine();
                double x;
                double y;
                try {
                    x = Double.parseDouble(str1);
                    y = Double.parseDouble(str2);
                } catch (NumberFormatException e) {
                    throw new MyException("Ошибка, вы ввели неверные данные");
                }
                if ((temp = Math.sqrt(x * x + y * y)) > min)
                    //Тогда минимуму присвоить темп
                    min = temp;
            }
            System.out.print("Minimum radius: " + min);
        } catch (MyException m) {
            System.out.println(m.getMessage());
        }
    }
}



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Syltan
Дата 18.6.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Скажите пожалуста, как в этот код добавить ещё  finally
PM MAIL   Вверх
jk1
Дата 18.6.2010, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Код

...
catch (MyException m) {
     System.out.println(m.getMessage());
}finally{
     // еще какие-то действия
}
...



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Syltan
Дата 18.6.2010, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: нет
Всего: -2



Пробую так, что-то не компилится.
Код

//Программа с использованием исключений
package u;
public class Main {
final private static int N = 50;
    final private static java.io.BufferedReader jin =
        new java.io.BufferedReader(new java.io.InputStreamReader(System.in));

    private static double min_rad(double x[], double y[], int n)  {
        double min = 0;
        double temp;
        int i;
                for (i = 0; i < n; i++)
               //Если значание темп больше минимума
            if ((temp = Math.sqrt(x[i] * x[i] + y[i] * y[i])) > min)
                    //Тогда минимуму присвоить темп
            min = temp;
        return min; //Вызвать минимум и передать аргументом функции
    }
        
    public static void main(String[] args) throws java.io.IOException,MyException {
        int n;
        double min = 0;
        double temp;
        System.out.print("Input n: ");
        //Здесь происходит ввод количества натуральных чисел
        try {
            try {
                //Здесь если мы ввели число n неверно, тогда сработает NumberFormatException
                n = Integer.parseInt(jin.readLine());
                //Проверяет является ли строка введённая числом
            } catch (NumberFormatException e) {
                throw new MyException("Ошибка, вы ввели неверные данные");
            }
            //Цикл нужен для того, чтоб каждое число мы вводили с клавиатуры
            for (int i = 0; i < n; i++) {
                System.out.print("Input x[" + i + "]: ");
                String str1 = jin.readLine();
                System.out.print("Input y[" + i + "]: ");
                String str2 = jin.readLine();
                double x;
                double y;
                try {
                //Если мы ввели не число тогда тоже ошибка
                //потому что х и у не может содержать строку так как оно типа double
                    x = Double.parseDouble(str1);
                    y = Double.parseDouble(str2);
                } catch (NumberFormatException e) {
                    throw new MyException("Ошибка, вы ввели неверные данные");
                }
                if ((temp = Math.sqrt(x * x + y * y)) > min)
                    //Тогда минимуму присвоить темп
                    min = temp;
            }
            System.out.print("Minimum radius: " + min);
        } catch (MyException m) {
            System.out.println("Очень плохо");
        }{
         finally{  System.out.println(m.getMessage()};
         }
       }
}



Добавлено через 5 минут и 58 секунд
Ещё, если можно растолкуйте что означает вот это действие 
Код

m.getMessage()


Откуда куда попадают данные?
PM MAIL   Вверх
jk1
Дата 18.6.2010, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Проблема вот в этом куске кода
Код

catch (MyException m) {
            System.out.println("Очень плохо");
        }{
         finally{  System.out.println(m.getMessage()};
         }
       }

Не компилируется по двум причинам:
1) Лишние скобки вокруг finally-блока
2) В finally-блоке нет переменной m, она доступна только в catch-блоке

Цитата

Откуда куда попадают данные?

При создании исключения в его конструктор передается сообщение
Код

new MyException("Ошибка, вы ввели неверные данные");

которое затем можно получить методом getMessage()


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0681 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.