• ベストアンサー

iアプリでの関数の計算について

関数(トランク関数とアークタンジェント)を計算したいのですが、以下のコードだと「シンボルを解釈処理できません」とメッセージが出てコンパイルできません。何か間違っているのでしょうか。 import com.nttdocomo.ui.*; public class test01 extends IApplication { private Panel p1; private Label label1,label2; public void start() { p1 = new Panel(); double num1,num2; num1 = Math.atan2(1.0,1.0); num2 = Math.trunc(1.0); label1=new Label("計算結果A "+ num1); label2=new Label("計算結果B "+ num2); p1.add(label1); p1.add(label2); Display.setCurrent(p1); } }

  • Java
  • 回答数6
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • koki_m
  • ベストアンサー率83% (45/54)
回答No.6

こんばんは。FastMathクラスのメソッドはすべてfloat型で入出力を行うようなので、その点に気をつければうまくいきそうですね。 コンパイル時のエラー出力内容を確認すると、何がうまくいっていないのか分かります。 J2MEプログラミングは各機器(携帯電話以外も含む)共通のCLDCと、各機器メーカーが提供するプロファイル(iアプリの場合はDoJa)というように、(最低でも)2種類のクラスライブラリを使うことになると思います。 StringクラスやMathクラスなどは、CLDCに定義されていますので、DoJaだけではなく、CLDCの方も確認されると良いと思います。 CLDC1.0日本語ドキュメント http://sdc.sun.co.jp/java/wireless/index.html CLDC1.1英語ドキュメント http://jcp.org/aboutJava/communityprocess/final/jsr139/index.html 以下のコードではコンパイルが通ると思います。 ※truncメソッドは分かりません。 - - - - - import com.nttdocomo.ui.*; import com.nttdocomo.ui.util3d.*; public class Test extends IApplication { public void start() { float res1, res2, res3; res1 = FastMath.sin(30.0f); res2 = FastMath.cos(45.0f); res3 = FastMath.atan2(10.0f, 20.0f); System.out.println("FastMathクラス**********"); System.out.println("sin(30.0) = " + res1); System.out.println("cos(45.0) = " + res2); System.out.println("atan2(10.0, 20.0) = " + res3); double res4, res5; res4 = Math.sin(Math.toRadians(30.0)); res5 = Math.cos(Math.toRadians(45.0)); System.out.println("Mathクラス**********"); System.out.println("sin(30.0) = " + res4); System.out.println("cos(45.0) = " + res5); } } -結果- FastMathクラス********** sin(30.0) = 0.49951172 cos(45.0) = 0.70703125 atan2(10.0, 20.0) = 63.430664 Mathクラス********** sin(30.0) = 0.49999999999999994 cos(45.0) = 0.7071067811865476

vega0707
質問者

お礼

初心者の私にもとても分かりやすく回答して下さったおかげで解決しました。 どうもありがとうございました!!

その他の回答 (5)

回答No.5

http://www.nttdocomo.co.jp/p_s/imode/java/ の iアプリコンテンツ開発ガイド for DoJa-4.0APIリファレンス編 をDLして中を見たら com.nttdocomo.ui.util3d.FastMathクラスに atan2(float a,float b) ってのがありますね。 これが希望のものかわかりませんが。

vega0707
質問者

補足

com.nttdocomo.ui.util3d.FastMathクラスでやってみましたが、コンパイルできませんでした。 また、com.nttdocomo.opt.ui.j3d.Mathクラスだとint型ですが、コンパイルできました。その代わりsinやcos等の他の関数がエラーになりました。解決法はないのでしょうか?

回答No.4

>アークタンジェントを他の関数で近似して計算することってできないのでしょうか? 自分には内容が理解できないですが(笑) http://www.kurims.kyoto-u.ac.jp/~ooura/pi04.pdf ↑のP2の(2)の式でできませんかね???

vega0707
質問者

補足

数学が苦手なので、私にも理解できませんでした。

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.3

>DoJa4.0から浮動少数をサポートするようになりましたよね? あ、ホントですね。失礼しました。 >「ドキュメント」って何ですか? 資料のことです。この場合はJavaDocなどです。 DoJaなどをダウンロードしたときにこんな感じ↓のHTMLなどが付いてませんでしたか? http://java.sun.com/j2se/1.5.0/ja/docs/ja/index.html http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html 下のURLのほうがJavaDocといわれる物で、各クラスのメソッドなどが分かります。 このURLはJDK5.0のものですが、SunやドコモのサイトにCLDC1.1やDoJa4.0 のものが置いてある筈なので、ダウンロードしてきましょう。

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.2

iアプリ(というかJ2ME)には浮動小数(double,float)はないです。 J2MEのリファレンスが手元にないのできちんと調べてないのですが、 Mathクラスも、浮動小数に関するメソッドは省略されていませんか? また、通常のJavaでは、小数の切捨てはMath.floor();です。

vega0707
質問者

補足

DoJa4.0から浮動少数をサポートするようになりましたよね? 小数の切捨ては解決しました。 ありがとうございました。

回答No.1

ないから。 じゃないでしょうか? 少なくとも truncメソッド はありませんでした。 (J2SE1.4とJ2SE1.5のjavadocの索引で確認) iアプリ用のjavaにはあるかもしれませんので、ドキュメントなどを調べてみてはいかがでしょうか。

vega0707
質問者

補足

「ドキュメント」って何ですか? 初心者なので何も分からなくてすみません。 またホントに無い場合、アークタンジェントを他の関数で近似して計算することってできないのでしょうか?

関連するQ&A

  • iアプリで複数の画面(パネル)を使いたいのですが。

    以下のコードを実行するとボタンとラベルが一緒の画面に表示されますが、ボタンを押した時に新しい画面(パネル)でラベルを表示したいのです。どのようにすれば良いのでしょうか? import com.nttdocomo.ui.*; import com.nttdocomo.io.*; public class test01 extends IApplication { public void start() { mypanel w_panel = new mypanel(); w_panel.setSoftLabel(w_panel.SOFT_KEY_1,"終了"); Display.setCurrent(w_panel); } class mypanel extends Panel implements SoftKeyListener { private Label w_label; private Button w_button; public mypanel(){ w_button = new Button("ボタン"); add(w_button); w_label = new Label("ラベル"); add(w_label); setSoftKeyListener(this); } public void softKeyReleased(int param){ if(param == this.SOFT_KEY_1){ terminate(); } } public void softKeyPressed(int param){ } } }

    • ベストアンサー
    • Java
  • javaでのiアプリの画面表示について

    javaでiアプリを作成したいのですが、行きずまっています。 テキストボックスとストップウォッチを画面上に両方表示させたいのですが、下のDisplay.setCurrent(p);とDisplay.setCurrent(mainWin);のどちらかしか表示されません。 ストップウォッチは、MainWin.javaが他にありますのでしっかり起動します。 どうすれば良いでしょうか? package stopwatch; import com.nttdocomo.ui.*; public class StopWatch extends IApplication implements ComponentListener { MainWindow mainWin; TextBox textbox1; TextBox textbox2; public void start() { Panel p = new Panel(); textbox1 = new TextBox("",16,2,TextBox.DISPLAY_ANY); p.add(textbox1); textbox2 = new TextBox("(未入力)",16,2, TextBox.DISPLAY_ANY); textbox2.setEditable(false); p.add(textbox2); p.setComponentListener(this); Display.setCurrent(p); mainWin = new MainWindow(); Display.setCurrent(mainWin); } public void componentAction(Component source , int type, int param) { if(type == ComponentListener.TEXT_CHANGED && source == textbox1) { textbox2.setText(textbox1.getText()); } } }

  • javaでのiアプリの画面表示について

    javaでiアプリを作成したいのですが、行きずまっています。 テキストボックスとストップウォッチを画面上に両方表示させたいのですが、下のDisplay.setCurrent(p);とDisplay.setCurrent(mainWin);のどちらかしか表示されません。 ストップウォッチは、MainWin.javaが他にありますのでしっかり起動します。 どうすれば良いでしょうか? package stopwatch; import com.nttdocomo.ui.*; public class StopWatch extends IApplication implements ComponentListener { MainWindow mainWin; TextBox textbox1; TextBox textbox2; public void start() { Panel p = new Panel(); textbox1 = new TextBox("",16,2,TextBox.DISPLAY_ANY); p.add(textbox1); textbox2 = new TextBox("(未入力)",16,2, TextBox.DISPLAY_ANY); textbox2.setEditable(false); p.add(textbox2); p.setComponentListener(this); Display.setCurrent(p); mainWin = new MainWindow(); Display.setCurrent(mainWin); } public void componentAction(Component source , int type, int param) { if(type == ComponentListener.TEXT_CHANGED && source == textbox1) { textbox2.setText(textbox1.getText()); } } }

  • iアプリ 複数パネル切替時の変数受渡(再度)

    すみませんが、再度質問です。 パネルを切替えると、変数が書換えられてません。 import com.nttdocomo.ui.*; public class TEST01 extends IApplication { MainCanvas mc; MainPanel mp; public void start() { mc = new MainCanvas(); mp = new MainPanel(); Display.setCurrent(mc); } } class MainCanvas extends Canvas{ TEST01 app; int data; public MainCanvas() { data=1; //----- data=1 Graphics g=getGraphics(); app = (TEST01)IApplication.getCurrentApp(); } public void paint(Graphics g) { data=2; // ここでdataを書換えてるのに・・・・ g.drawString("data="+data,100,100); g.drawString("セレクトキーで画面切替",50,200); } public void processEvent(int type, int param) { if (type == Display.KEY_PRESSED_EVENT) { if (param == Display.KEY_SOFT2) { IApplication.getCurrentApp().terminate(); } if (param == Display.KEY_SELECT) { Display.setCurrent(app.mp); } } } } class MainPanel extends Panel implements ComponentListener{ TEST01 app; Button b1; Label l1; public MainPanel() { app=(TEST01)IApplication.getCurrentApp(); l1=new Label("data="+app.mc.data); //書換えたdata=2にならないのはなぜ? b1=new Button("Push me"); add(l1); add(b1); setComponentListener(this); } public void componentAction(Component c,int type, int param){ if (c == b1 && type == BUTTON_PRESSED) Display.setCurrent(((TEST01)IApplication.getCurrentApp()).mc); } } data=1だったのをdata=2にしたのに、1のままです。

    • ベストアンサー
    • Java
  • iアプリ パネル遷移の際の変数の受け渡し方について

    iアプリで、パネル遷移の際に遷移元の変数を遷移先に引き渡したいのですが、その方法がわかりません。 テスト用のプログラムを作成しましたので、どなたかご教示いただければ幸いです。 ソフトキー1:終了 ソフトキー2:TextBoxのリセット ボタン:パネル遷移とTextBoxの入力文字の遷移先への引き渡し TextBox:受納したテキストの表示と送付用のテキストの入力 以上の機能をパネル'p1'と'p2'とに備え、二つのパネル間での遷移とテキストの受け渡しをしたいと思います。 ========== Test.java ========== public class testx extends IApplication { public void start() { P1 p1 = new P1(); P2 p2 = new P2(); Display.setCurrent(p1); } } ======== P1.java ======== public class P1 extends Panel implements ComponentListener, SoftKeyListener{ IApplication iapp; String str =""; Button btn1 = new Button("送る"); TextBox tb1=new TextBox("",33,1,TextBox.DISPLAY_ANY); P1(){ setTitle("P1"); HTMLLayout lm=new HTMLLayout(); setLayoutManager(lm); lm.begin(HTMLLayout.LEFT); add(tb1); add(btn1); lm.end(); setSoftKeyListener(this); setSoftLabel(SOFT_KEY_1,"終了"); setSoftLabel(SOFT_KEY_2,"リセット"); setComponentListener(this); Display.setCurrent(this); } public void componentAction(Component source,int type,int param){ if(type==BUTTON_PRESSED){ /* p2 からのテキストをstrと定義しTextBoxに表示したい。 その定義の仕方がわからない。 str = ; */ tb1.setText(str); /* TextBoxに新たに入力した文字列をstrと再定義。 変数strをp2に渡したい。 */ str = tb1.getText(); P2 p2 = new P2(); Display.setCurrent(p2); } } public void softKeyPressed(int softKey){ if(softKey==SOFT_KEY_1){ iapp.terminate(); } if(softKey==SOFT_KEY_2){ tb1.setText(""); } } public void softKeyReleased(int softKey){ } } ======== P2.java ======== public class P2 extends Panel implements ComponentListener, SoftKeyListener{ IApplication iapp; String str =""; Button btn1 = new Button("送る"); TextBox tb1=new TextBox("",33,1,TextBox.DISPLAY_ANY); P2(){ setTitle("P2"); HTMLLayout lm=new HTMLLayout(); setLayoutManager(lm); lm.begin(HTMLLayout.LEFT); add(tb1); add(btn1); lm.end(); setSoftKeyListener(this); setSoftLabel(SOFT_KEY_1,"終了"); setSoftLabel(SOFT_KEY_2,"リセット"); setComponentListener(this); Display.setCurrent(this); } public void componentAction(Component source,int type,int param){ if(type==BUTTON_PRESSED){ /* p1 からのテキストをstrと定義しTextBoxに表示したい。 その定義の仕方がわからない。 str = ; */ tb1.setText(str); /* TextBoxに新たに入力した文字列をstrと再定義。 変数strをp1に渡したい。 */ str = tb1.getText(); P1 p1 = new P1(); Display.setCurrent(p1); } } public void softKeyPressed(int softKey){ if(softKey==SOFT_KEY_1){ iapp.terminate(); } if(softKey==SOFT_KEY_2){ tb1.setText(""); } } public void softKeyReleased(int softKey){ } }

  • Java 他クラスの呼び出しが上手くいきません。

    Java初心者です。 過去Q&Aとして掲載されていた「iアプリでのクラスファイルが複数ある時の画面遷移」と同趣旨のことがしたく、記事を参考にプログラムを組んでみました。 しかし、コンパイルの際、画面遷移のための別クラスファイルを呼び出しインスタンス化するところで生じる「シンボルを見つけられません。」というエラーの原因がつかめず困っています。 作成したプログラムのどこがいけないのか、ご教示いただければ幸いです。 作成したプログラム ========= Test01.java ========= import com.nttdocomo.ui.*; public class Test01 extends IApplication implements ComponentListener{ Button btn1; Label lbl1; public void start() { Panel p1 = new Panel(); p1.setTitle("p1"); Label lbl1=new Label("p1に居ます。"); p1.add(lbl1); Button btn1=new Button("next"); p1.add(btn1); p1.setComponentListener(this); Display.setCurrent(p1); } public void componentAction(Component source, int type, int param) { if(type == ComponentListener.BUTTON_PRESSED) { if(source==btn1){ Test02 test02 =new Test02(); //ここでエラーが発生します。 Display.setCurrent(test02); lbl1.setText("p2に遷移"); } } } } ============ Test02.java ============ import com.nttdocomo.ui.*; public class Test02 extends IApplication implements ComponentListener{ Button btn1; Label lbl1; public void start() { Panel p2 = new Panel(); p2.setTitle("p2"); Label lbl1=new Label("p2に居ます。"); p2.add(lbl1); Button btn1=new Button("next"); p2.add(btn1); p2.setComponentListener(this); Display.setCurrent(p2); } public void componentAction(Component source, int type, int param) { if(type == ComponentListener.BUTTON_PRESSED) { if(source==btn1){ lbl1.setText("p1に遷移"); //コンパイルエラーは生じませんが、ラベル表示の切り替えができません。 } } } }

    • ベストアンサー
    • Java
  • iアプリの関数(log)について

    関数(log)を計算したいのですが、MathクラスでもFastMathクラスでもうまくいきませんでした。 以下のコードだと「シンボルを解釈処理できません」とメッセージが出てコンパイルできません。何か間違っているのでしょうか。それともDojaではlogをサポートしていないのでしょうか? import com.nttdocomo.ui.*; import com.nttdocomo.ui.util3d.*; public class A extends IApplication { public void start() { float res1; res1 = FastMath.log(0.5); System.out.println("FastMathクラス**********"); System.out.println("log(0.5) = " + res1); double res2; res2 = Math.log(0.5); System.out.println("Mathクラス**********"); System.out.println("log(0.5) = " + res2); } }

    • ベストアンサー
    • Java
  • C# 計算処理中に実行中ウィンドウを表示させたい。

    アドバイスをお願いいたします。 やりたいこと: (1)メインウィンドウで「計算始めるボタン」を押す。 (2)すると計算中には「実行中」の文字が別ウィンドウで立ち上がる。 (3)計算が終わると別ウィンドウが閉じる。 下記プログラムの不具合: 別ウィンドウで「実行中」の文字を出させたいが、文字部分が描画されない。 注意:  下記プログラムはAthlon3000+で1秒ほどかかります。 CPUが遅いマシンで試す場合は「//計算処理」部分のfor重みを軽減させて実行して下さい。 using System; using System.Drawing; using System.Windows.Forms; //メインウィンドウ public class MainForm : Form { private Button button; private Label label; public MainForm() { button = new Button(); button.Text = "計算GO!!"; button.Click += new System.EventHandler(button_click); label = new Label(); label.Location = new Point(50,50); label.Text = "メインウィンドウ!"; Controls.Add(button); Controls.Add(label); Text = "MainForm"; BackColor = Color.Blue; } static void Main() { Application.Run(new MainForm()); } //計算GOボタンをクリックした時の処理 private void button_click(object sender, System.EventArgs e) { double z; SubForm Sub = new SubForm(); Sub.Show(); //計算処理 for(int i=0; i<=500000000; i++) z = double.MaxValue * double.MinValue; Sub.Close(); MessageBox.Show("計算終了"); } } //計算中を通知するウィンドウ public class SubForm : Form { private Label label; public SubForm(){ label = new Label(); label.Text = "実行中!"; label.Location = new Point(50,50); Text = "計算中通知ウィンドウ"; BackColor = Color.Red; Controls.Add(label); } }

  • 整数を好きなだけ入力し、個数、合計、平均値を表示するプログラム

    appletviewerに、ボックスの中に整数を好きなだけ入力し、個数、合計、平均値を以下のように表示させるようなプログラムを作りたいです。(1,2,3を入力した場合)     データ□ (入力)        (計算)   個数=3   合計=6   平均値=2 ※□はボックスです。(入力)(計算)はクリックするボタンです。 どなたかご指導やアドバイスをお願いいたします。まだまだ初心者でとても困っています。。 ちなみに途中まで考えたのが以下のプログラムです。 import java.applet.*; import java.awt.Button; import java.awt.Label; import java.awt.TextField; import java.awt.event.*; public class Lec1106 extends Applet implements ActionListener { private TextField box1 = new TextField(5); private Label moji1 = new Label("データ"); private Label moji2 = new Label("個数="); private Label moji3 = new Label("合計="); private Label moji4 = new Label("平均値="); private Button nyuuryoku = new Button("入力"); private Button keisan = new Button("計算"); public void init() { resize(320,240); add(moji1); add(box1); add(nyuuryoku); nyuuryoku.addActionListener(this); add(keisan); keisan.addActionListener(this); add(moji2); add(moji3); add(moji4); } public void actionPerformed(ActionEvent e)  {int i; String t1=box1.getText(); i=Integer.parseInt(t1);

    • ベストアンサー
    • Java
  • iアプリ Display#setCurrent使用での画面ちらつき

    こんにちは。 iアプリを作っています。 トップメニュー、サブメニューがあり、1Canvas画面で処理するのが しんどかったので機能毎のCanvasを継承したクラスを作りました。 そのクラスをIApplicationを継承したクラス内のメソッドで Display.setCurrent()を実行して画面を切り替えていますが 切り替え時に画面がちらつきます。 どうにかちらつくことの回避方法はありませんでしょうか。 簡略したソース public class AppliMain extends IApplication {  ACanvas aCanvas = null;  BCanvas bCanvas = null;  public void start () {   aCanvas = new ACanvas ( this );   bCanvas = new BCanvas ( this );   this.showACanvas ();  }  public void showACanvas () {   Display.setCurrent ( aCanvas );  }  public void showBCanvas () {   Display.setCurrent ( bCanvas );  } } public class ACanvas extends Canvas {  private AppliMain parent = null;  public ACanvas ( AppliMain _parent ) {   parent = _parent;  }  public void paint ( Graphics g ) {  }  public void processEvent ( int type, int param ) {   // BCanvasに表示切替   parent.showBCanvas();  } } public class BCanvas extends Canvas {  private AppliMain parent = null;  public BCanvas ( AppliMain _parent ) {   parent = _parent;  }  public void paint ( Graphics g ) {  }  public void processEvent ( int type, int param ) {   // ACanvasに表示切替   parent.showACanvas();  } }

    • ベストアンサー
    • Java

専門家に質問してみよう