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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> а как работает Math.cos(), я такого точно не видел... 
V
    Опции темы
malah
Дата 28.2.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сестра попросила вычислить значения cos(a)^2 для углов от 0 до 360 градусов с шагом в 15 градусов...
написал следующее...
Код

import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
/**
 *
 * @author sergey.malahov
 */
public class Cos extends JFrame{
    String[] header = new String[]{"Угол", "Cos()","Cos()^2"};
    String [][] body = new String [25][3];
    Cos(){
        super("Таблица значений косинуса");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        for(int i = 0; i < 25; i++){
            body[i][0] = Integer.toString(15*i);
            body[i][1] = Double.toString(Math.cos(Math.toRadians(i*15)));            
            body[i][2] = Double.toString(Math.cos(i*15*2*Math.PI/360)*Math.cos(i*15*2*Math.PI/360));
        }        
        JTable table = new JTable(body,header);
        table.setRowHeight(20);
        table.setFont(new Font(Font.SERIF,Font.TRUETYPE_FONT,14));
        getContentPane().add(new JScrollPane(table));
        setSize(300,560);
        setVisible(true);        
    }
    public static void main(String[] args){
        new Cos();
    }
}


то что я увидел далее меня поразило....

http://ipicture.ru/uploads/080228/VCzJ6VxBer.jpg 

так что вопрос: кто нибудь может рассказать почему так или как так получилось? 
PM MAIL   Вверх
niasilil
Дата 28.2.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 9



прогнал код, увидел что 6.123233995736766E-17 трансформируется в 6.1232339 когда используешь toString

Это сообщение отредактировал(а) niasilil - 28.2.2008, 23:34


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
malah
Дата 28.2.2008, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



То есть toString халявит... А как выходить из такого положения, мысли есть?
PM MAIL   Вверх
niasilil
Дата 28.2.2008, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 9



Код

    DecimalFormat f = new DecimalFormat("#.######");

    Cos() {
// skipped

        for (int i = 0; i < 25; i++) {
            body[i][0] = Integer.toString(15 * i);
            body[i][1] = f.format(Math.cos(Math.toRadians(i * 15)));
            body[i][2] = f.format(Math.cos(i * 15 * 2 * Math.PI / 360)
                    * Math.cos( i * 15 * 2 * Math.PI / 360));
        }
    }



--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
malah
Дата 28.2.2008, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за ответ )
p.s. только что заметил свой косяк.... нужно фрейм делать было шире smile 
PM MAIL   Вверх
niasilil
Дата 28.2.2008, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 9



кстати, есть такая штука как статик импорт, очень удобно в случае если переменная или метод используется много раз в классе. В случае Math классов часто задалбывает писать Math.cos() 
Код

import java.text.DecimalFormat;
import static java.lang.Math.PI;
import static java.lang.Math.cos;

public class Test {
    String[][] body = new String[25][3];

    DecimalFormat f = new DecimalFormat("#.####");

    Test() {
        for (int i = 0; i < 25; i++) {
            body[i][0] = Integer.toString(15 * i);
            body[i][1] = f.format(cos(Math.toRadians(i * 15)));
            body[i][2] = f.format(cos(i * 15 * 2 * PI / 360) * cos(i * 15 * 2 * PI / 360));

            System.out.println(body[i][0]+ "\t"+ body[i][1] + "\t" + body[i][2]);
        }
    }

    public static void main(String[] args) {
        new Test();
    }
}



--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
malah
Дата 29.2.2008, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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