Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

 コンパイルエラーについて

エラーをどう修正したら良いか分かりません。修正方法をどうか教えてください。
[プログラム]
import java.applet.Applet;                                    
import java.awt.*;                                            
import  java.io.*;


public class c_l_mecha2 extends Applet{
    static double theta[],alpha[],beta[],gamma[],alphad[],l[];
    static int width,height,x1[],y1[],x2[],y2[],x3[],y3[],x4[],y4[],x5[],y5[],t;
    static byte a,b,c,d,e;
    public static void main(String args[]){
        l=new double[100];
        theta=new double[100];
        alpha=new double[100];
        gamma=new double[100];
        alphad=new double[100];
        x1=new int[100];
        y1=new int[100];
        x2=new int[100];
        y2=new int[100];
        x3=new int[100];
        y3=new int[100];
        x4=new int[100];
        y4=new int[100];
        x5=new int[100];
        y5=new int[100];
        
        
        a=20;
        b=50;
        c=30;
        d=70;
        e=c+100;
        
        for(t=1;t<=100;t++){
            theta[t]=t*2*Math.PI/100;
            l[t]=Math.sqrt(a*a+d*d-2*a*d*Math.cos(theta[t]));
            gamma[t]=Math.asin(Math.sin(theta[t])*a/l[t]);
            alphad[t]=Math.acos(-(b*b-c*c-l[t]*l[t])/(2*l[t]*c));
            if(Math.PI>=theta[t]){
            alpha[t]=Math.PI-gamma[t]-alphad[t];
            }
            if(Math.PI<=theta[t]){
            alpha[t]=Math.PI+gamma[t]-alphad[t];
            }
            beta[t]=Math.atan((c*Math.sin( alpha[t])-a*Math.sin(theta[t]))/(c*Math.cos(alpha[t])-a*Math.cos(theta[t])));
        }
    }
    public void init(){                                        
        Dimension d=size();
        width=d.width;
        height=d.height;
    }
        
    
        public void paint(Graphics g){
            for(t=1;t<=100;t++){
                x1[t]=100;
                y1[t]=100;
                x2[t]=a*Math.cos(theta[t])+x1[t];
                y2[t]=a*Math.sin(theta[t])+y1[t];
                x3[t]=x1[t]+d;
                y3[t]=100;
                x4[t]=c*Math.cos(alpha[t])+x3[t];
                y4[t]=c*Math.sin(alpha[t])+y3[t];
                x5[t]=e*Math.cos(alpha[t])+x3[t];
                y5[t]=e*Math.sin(alpha[t])+y3[t];
                g.drawLine((int)x1[t],(int)y1[t],(int)x2[t],(int)y2[t]);
                g.drawLine((int)x2[t],(int)y2[t],(int)x3[t],(int)y3[t]);
                g.drawLine((int)x3[t],(int)y3[t],(int)x4[t],(int)y4[t]);
                g.drawLine((int)x4[t],(int)y4[t],(int)x1[t],(int)y1[t]);
                g.drawLine((int)x4[t],(int)y4[t],(int)x5[t],(int)y5[t]);
                if(t>0){
                    g.drawLine((int)x5[t-1],(int)y5[t-1],(int)x5[t],(int)y5[t]);
                }
            }
        }
    
}

[エラー]
■E:\Program Files\jdk\Gtst.java> javac  c_l_mecha2.java
c_l_mecha2.java:32: 精度が落ちている可能性
検出値  : int
期待値  : byte
        e=c+100;
                   ^
c_l_mecha2.java:59: 精度が落ちている可能性
検出値  : double
期待値  : int
                x2[t]=a*Math.cos(theta[t])+x1[t];
                                                          ^
c_l_mecha2.java:60: 精度が落ちている可能性
検出値  : double
期待値  : int
                y2[t]=a*Math.sin(theta[t])+y1[t];
                                                          ^
c_l_mecha2.java:63: 精度が落ちている可能性
検出値  : double
期待値  : int
                x4[t]=c*Math.cos(alpha[t])+x3[t];
                                                          ^
c_l_mecha2.java:64: 精度が落ちている可能性
検出値  : double
期待値  : int
                y4[t]=c*Math.sin(alpha[t])+y3[t];
                                                          ^
c_l_mecha2.java:65: 精度が落ちている可能性
検出値  : double
期待値  : int
                x5[t]=e*Math.cos(alpha[t])+x3[t];
                                                          ^
c_l_mecha2.java:66: 精度が落ちている可能性
検出値  : double
期待値  : int
                y5[t]=e*Math.sin(alpha[t])+y3[t];
                                                          ^
注: c_l_mecha2.java は推奨されない API を使用またはオーバーライドしています。
注: 詳細については、-deprecation オプションを指定して再コンパイルしてください。
エラー 7 個


25

回答

3275

閲覧

25件の回答

評価

0

まずは、エラーメッセージを検索してみてください。

評価

0

この数日検索いたしました。しかし具体的な方法、もしくは例のようなものがないため分からないんです。早く解決しないとまずいんです。回答に書くような期待感を持たせるようなことやめてください。ここは問題解決を行う場ではないのでしょうか?初心者だと質問してはいけないのでしょうか?どうしたら回答していただけるのでしょうか?

評価

0

>この数日検索いたしました。
それならそう、書いておくものです。最初の書き込みでは、単なる丸投げにしか見えません。

>早く解決しないとまずいんです。
それは質問者の都合であり、回答者には無関係です。

>どうしたら回答していただけるのでしょうか?
「答え」を聞こうと思わないことでしょう。

「精度が落ちている可能性」を検索した結果105件出てきましたが、本当に具体的なものがひとつもなかったのですか?

評価

0

>初心者だと質問してはいけないのでしょうか?
そんなことありません。

>どうしたら回答していただけるのでしょうか?
swimさんが回答をもらうためにmioさんは発言したと思います。

最後に、byte型等で計算を行った場合は、
結果がInt型になります。
それなのに、byte型にそのまま計算結果が入っているので、エラーとなっています。

評価

0

先ほどはつい向きになってしまってすみません。しろさんの回答を参考にさせていただき、変えてみた結果エラーはなくなりましたが、違う何かが出てきてしまいました。
[プログラム]
import java.applet.Applet;                                    
import java.awt.*;                                            
import  java.io.*;


public class c_l_mecha2 extends Applet{
    static double theta[],alpha[],beta[],gamma[],alphad[],l[];
    static int width,height,x1[],y1[],x2[],y2[],x3[],y3[],x4[],y4[],x5[],y5[],t;
    static int a,b,c,d,e;
    public static void main(String args[]){
        l=new double[100];
        theta=new double[100];
        alpha=new double[100];
        gamma=new double[100];
        alphad=new double[100];
        x1=new int[100];
        y1=new int[100];
        x2=new int[100];
        y2=new int[100];
        x3=new int[100];
        y3=new int[100];
        x4=new int[100];
        y4=new int[100];
        x5=new int[100];
        y5=new int[100];
        
        
        a=20;
        b=50;
        c=30;
        d=70;
        e=130;
        
        for(t=1;t<=100;t++){
            theta[t]=t*2*Math.PI/100;
            l[t]=Math.sqrt(a*a+d*d-2*a*d*Math.cos(theta[t]));
            gamma[t]=Math.asin(Math.sin(theta[t])*a/l[t]);
            alphad[t]=Math.acos(-(b*b-c*c-l[t]*l[t])/(2*l[t]*c));
            if(Math.PI>=theta[t]){
            alpha[t]=Math.PI-gamma[t]-alphad[t];
            }
            if(Math.PI<=theta[t]){
            alpha[t]=Math.PI+gamma[t]-alphad[t];
            }
            beta[t]=Math.atan((c*Math.sin( alpha[t])-a*Math.sin(theta[t]))/(c*Math.cos(alpha[t])-a*Math.cos(theta[t])));
        }
    }
    public void init(){                                        
        Dimension d=size();
        width=d.width;
        height=d.height;
    }
        
    
        public void paint(Graphics g){
            for(t=1;t<=100;t++){
                x1[t]=100;
                y1[t]=100;
                x2[t]=a*(int)Math.cos(theta[t])+x1[t];
                y2[t]=a*(int)Math.sin(theta[t])+y1[t];
                x3[t]=x1[t]+d;
                y3[t]=100;
                x4[t]=c*(int)Math.cos(alpha[t])+x3[t];
                y4[t]=c*(int)Math.sin(alpha[t])+y3[t];
                x5[t]=e*(int)Math.cos(alpha[t])+x3[t];
                y5[t]=e*(int)Math.sin(alpha[t])+y3[t];
                g.drawLine((int)x1[t],(int)y1[t],(int)x2[t],(int)y2[t]);
                g.drawLine((int)x2[t],(int)y2[t],(int)x3[t],(int)y3[t]);
                g.drawLine((int)x3[t],(int)y3[t],(int)x4[t],(int)y4[t]);
                g.drawLine((int)x4[t],(int)y4[t],(int)x1[t],(int)y1[t]);
                g.drawLine((int)x4[t],(int)y4[t],(int)x5[t],(int)y5[t]);
                if(t>0){
                    g.drawLine((int)x5[t-1],(int)y5[t-1],(int)x5[t],(int)y5[t]);
                }
            }
        }
    
}

[エラー?]
■E:\Program Files\jdk\Gtst.java> javac  c_l_mecha2.java
注: c_l_mecha2.java は推奨されない API を使用またはオーバーライドしています。
注: 詳細については、-deprecation オプションを指定して再コンパイルしてください。

評価

0

>「推奨されない API 」
でしょうか?これは前回のコンパイルでも出てきていますが。

「推奨されないAPI」については、なにか調べてみましたか?

評価

0

ネットでしか調べていません・・・。どういうことか分かりませんでした。
完成目標はこれhttp://www3.zero.ad.jp/caldia-e/diatto/images/0015_2g-001.gifなのですが、どうでしょう?初めてJAVAに手をつけた自分としては頭が痛くなります・・・。

評価

0

分かったこと、分からなかったことを書き出してみましょう。
それについての解説ならともかく、1から10まで「自分に」分かる言葉で解説してというのは、ちょっと虫の良い考えです。
なにか書いても、「よそで同じことが書いてあったけど分からなかった」ということに、なるかも知れません。
回答者の役割は、質問者の代わりに調べて質問者に分かるまで繰り返し解説することではありません。

とりあえず、これはエラーではありません。エラーであれば前回のように「エラー1個」とか出るはずで、またclassファイルも作成されません。

高い目標を持つのは大切なことですが、基礎を固めないで先へ先へ急いでも、分からないことが増えるばかりでいいことはありません。
そのたびに質問することになってしまいます。
「急がば回れ」というのは、プログラミングにも当てはまります。

評価

0

えーつまり、Windowsならコマンドプロンプト上で、
javac -Xlint:deprecation c_l_mecha2.java
と入力することで、推奨されないAPIとやらがわかるということですね。で、試してみると、
Dimension d=size();
のsize()は推奨されておらず、getSize()にすべきとのことです。

が、修正後コンパイルして実行してみると、ぬるぽエラーが発生しました…。

評価

0

はぁああ!!!どうやら、beta[]が定義されていないようです…。がしかし、それを修正してもまた新たなるエラーが…(汗)。

評価

0

よく見たら配列を0〜99までしか確保してないのに[100]にアクセスしようとしてる…。

評価

0

エラーも※も出ないプログラムです。図形が出るはずなのですが、全く何も生成されません。Graphicsの部分に間違いがあるのでしょうか?
import java.applet.Applet;                                    
import java.awt.*;                                            
import  java.io.*;

/*
<applet code="c_l_mecha4.class" width="1000" height="1000">
</applet>
*/
public class c_l_mecha4 extends Applet{
    static double theta[],alpha[],beta[],gamma[],alphad[],l[];
    static float width,height,x1[],y1[],x2[],y2[],x3[],y3[],x4[],y4[],x5[],y5[];
    static int a,b,c,d,e,t;
    public static void main(String args[]){
        l=new double[100];
        theta=new double[100];
        alpha=new double[100];
        gamma=new double[100];
        alphad=new double[100];
        x1=new float[100];
        y1=new float[100];
        x2=new float[100];
        y2=new float[100];
        x3=new float[100];
        y3=new float[100];
        x4=new float[100];
        y4=new float[100];
        x5=new float[100];
        y5=new float[100];
        
        
        a=20;
        b=50;
        c=30;
        d=70;
        e=130;
        
        
        for(t=0;t<100;t++){
            theta[t]=t*2*Math.PI/100;
            l[t]=Math.sqrt(a*a+d*d-2*a*d*Math.cos(theta[t]));
            gamma[t]=Math.asin(Math.sin(theta[t])*a/l[t]);
            alphad[t]=Math.acos(-(b*b-c*c-l[t]*l[t])/(2*l[t]*c));
            if(Math.PI>=theta[t]){
            alpha[t]=Math.PI-gamma[t]-alphad[t];
            }
            if(Math.PI<theta[t]){
            alpha[t]=Math.PI+gamma[t]-alphad[t];
            }
            beta[t]=Math.atan((c*Math.sin( alpha[t])-a*Math.sin(theta[t]))/(c*Math.cos(alpha[t])-a*Math.cos(theta[t])));
        }
    }

        public void paint(Graphics g){
            for(t=0;t<100;t++){
                x1[t]=100;
                y1[t]=100;
                x2[t]=a*(float)Math.cos(theta[t])+x1[t];
                y2[t]=a*(float)Math.sin(theta[t])+y1[t];
                x3[t]=x1[t]+d;
                y3[t]=100;
                x4[t]=c*(float)Math.cos(alpha[t])+x3[t];
                y4[t]=c*(float)Math.sin(alpha[t])+y3[t];
                x5[t]=e*(float)Math.cos(alpha[t])+x3[t];
                y5[t]=e*(float)Math.sin(alpha[t])+y3[t];
                g.drawLine((int)x1[t],(int)y1[t],(int)x2[t],(int)y2[t]);
                g.drawLine((int)x2[t],(int)y2[t],(int)x3[t],(int)y3[t]);
                g.drawLine((int)x3[t],(int)y3[t],(int)x4[t],(int)y4[t]);
                g.drawLine((int)x4[t],(int)y4[t],(int)x1[t],(int)y1[t]);
                g.drawLine((int)x4[t],(int)y4[t],(int)x5[t],(int)y5[t]);
                if(t>0){
                    g.drawLine((int)x5[t-1],(int)y5[t-1],(int)x5[t],(int)y5[t]);
                }
                int xPoints[] = {(int)x1[t], (int)x2[t], (int)x3[t], (int)x4[t]};
                int yPoints[] = {(int)y1[t], (int)y2[t], (int)y3[t], (int)y4[t]};
                g.drawPolygon(xPoints, yPoints, 4);
            }
            
        }
}

評価

0

Appletなのに何故にmainメソッドが?

評価

0

よく見ればローカル変数を一切使わず、全部staticフィールドですか・・・
Javaの基礎からみっちりやり直したほうがいいと思いますが?

評価

0

staticにしないとエラーが出るためstaticを付けました。何か問題があるのでしょうか?

評価

0

そういうその場しのぎな対応は問題だと思いますが。意味を理解しないままJavaをやっていても、結局いつかはつまずくわけで、なら最初からきちんとやるべきでは?と思うのです。
はっきり言うと、作ろうとしているもののレベルが今のあなたには高すぎます。このままの実力では到底不可能ですから、まずは実力をある程度つけるほうがいいと思います。

評価

0

プログラムは、エラーがなくなれば正しくなるわけではありません。
そうであれば、今頃は問題なく動作しているでしょう。

正しい理解をして、正しい修正をしましょう。

評価

0

どうしたらpublic void paint(Graphics g){
・・・}内でx1,x2などの前で宣言していたものを使えるのでしょうか?このプログラムをいじってC言語に変えた結果、C言語では正常に動作したので考え方は間違っていなかったようです。
[プログラム]
import java.applet.Applet;                                    
import java.awt.*;                                            
import  java.io.*;
import java.awt.Graphics;

/*
<applet code="c_l_mecha4.class" width="1000" height="1000">
</applet>
*/
public class c_l_mecha4 extends Applet{
    final static int N=10;
    public static void main(String[] args){
        double theta[],alpha[],beta[],gamma[],alphad[],l[];
        float width,height,x1[],y1[],x2[],y2[],x3[],y3[],x4[],y4[],x5[],y5[];
        int a,b,c,d,e,t;
        l=new double[N];
        theta=new double[N];
        alpha=new double[N];
        gamma=new double[N];
        alphad=new double[N];
        x1=new float[N];
        y1=new float[N];
        x2=new float[N];
        y2=new float[N];
        x3=new float[N];
        y3=new float[N];
        x4=new float[N];
        y4=new float[N];
        x5=new float[N];
        y5=new float[N];
        
        
        a=20;
        b=50;
        c=30;
        d=70;
        e=130;
        
        
        for(t=0;t<N;t++){
            theta[t]=t*2*Math.PI/100;
            l[t]=Math.sqrt(a*a+d*d-2*a*d*Math.cos(theta[t]));
            gamma[t]=Math.asin(Math.sin(theta[t])*a/l[t]);
            alphad[t]=Math.acos(-(b*b-c*c-l[t]*l[t])/(2*l[t]*c));
            if(Math.PI>=theta[t]){
            alpha[t]=Math.PI-gamma[t]-alphad[t];
            }
            if(Math.PI<theta[t]){
            alpha[t]=Math.PI+gamma[t]-alphad[t];
            }
            beta[t]=Math.atan((c*Math.sin( alpha[t])-a*Math.sin(theta[t]))/(c*Math.cos(alpha[t])-a*Math.cos(theta[t])));
        }
        for(t=0;t<N;t++){
                x1[t]=100;
                y1[t]=100;
                x2[t]=a*(float)Math.cos(theta[t])+x1[t];
                y2[t]=a*(float)Math.sin(theta[t])+y1[t];
                x3[t]=c*(float)Math.cos(alpha[t])+d+x1[t];
                y3[t]=c*(float)Math.sin(alpha[t])+d+y1[t];
                x4[t]=x1[t]+d;
                y4[t]=y1[t];
                x5[t]=e*(float)Math.cos(beta[t])+x2[t];
                y5[t]=e*(float)Math.sin(beta[t])+y2[t];
        }
    }
        public void paint(Graphics g){
            g.drawLine((int)x1[t],(int)y1[t],(int)x2[t],(int)y2[t]);
            g.drawLine((int)x2[t],(int)y2[t],(int)x3[t],(int)y3[t]);
            g.drawLine((int)x3[t],(int)y3[t],(int)x4[t],(int)y4[t]);
            g.drawLine((int)x4[t],(int)y4[t],(int)x1[t],(int)y1[t]);
            g.drawLine((int)x4[t],(int)y4[t],(int)x5[t],(int)y5[t]);
            if(t>0){
                g.drawLine((int)x5[t-1],(int)y5[t-1],(int)x5[t],(int)y5[t]);
            }
        }
}

評価

0

考え方以前の問題だと思うのですが・・・
まず、アプレットについてきちんと勉強しないと。

評価

0

CとJavaだと、staticの意味から変わってきますが…。

とりあえず、もっと簡単なAppletから作ってみることです。
何度も言いますが、基礎を固めないうちに先へ進んでも、分からなくなるばかりです。

評価

0

マルチポスト
http://bbs.wankuma.com/index.cgi?mode=al2&namber=6566

評価

0

マルチポスト
http://bbs.wankuma.com/index.cgi?mode=al2&namber=6566

評価

0

マルチポスト
http://bbs.wankuma.com/index.cgi?mode=al2&namber=6566

評価

0

ここはマルポ禁止ではなく非推奨、つっこみに関して資源の無駄、
すれぬしも別の箇所であげてると報告はしましょう。

評価

0

杏氏
>つっこみに関して資源の無駄

いいえ、情報の共有という意味では全く無駄とは言えません。
スレ主が積極的に双方のスレッドで情報の統合をしているなら話は別ですが。

>すれぬしも別の箇所であげてると報告はしましょう

第三者がつっこむと資源の無駄なのに投稿者には報告を推奨するんですか?

スレ主が見ているか謎ですがマルチポスト先で投げやりな投稿削除をした後にレスがついているようです。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。