- ベストアンサー
初心者の疑問:intとlongの計算について
- 初心者の方が「わかりやすいjava」を使って独習していて、intとlongの計算につまづいています。
- 質問のコードでは、int型の変数「n」に5を代入し、long型の変数「a」に10を代入しています。
- ただし、int型とlong型の演算では、int型の値がlong型に自動変換されてから演算が行われます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- 例外処理について
続けて質問です…すみません; public class OddEven { private static boolean even(int k) { return k/2*2 == k; } public static void main(String[] args){ int l; int m=0; int n=0; try{ for(l=0;l<args.length; l++) { int a = Integer.parseInt(args[k]); if(even(a)) { m++; } else{ n++; } } }catch (NumberFormatException e) { System.out.println("<" + e + ">"); } System.out.println("Even = " + m); System.out.println("Odd = " + n); } } とし、例えば「1 2 3 a 5」の中の偶数奇数の個数を判定すると、奇数が2個、偶数が1個となり、例外処理されたaの後の5が奇数にカウントされないのですが、どのように修正すればよろしいのでしょうか?
- ベストアンサー
- Java
- 静止的フィールドについて教えてください
教えてください。以下のプログラムだとして、 class Box { static int a = 0 ; int b = 0 ; int c = a+4; } class sample { public static void main(String[] args) { Box n = new Box() ; n.a-- ; n.b-- ; n.c[1]-- ; System.out.println("n.a= "+n.a);//-1 System.out.println("n.b ="+n.b);//-1 System.out.println("n.c[2]="+n.c[2]);//4 Box m = new Box() ; m.a++ ; m.b++ ; m.c[2]++ ; System.out.println("n.a ="+n.a);//0 System.out.println("n.b ="+n.b);//-1 System.out.println("n.c[2] ="+n.c[2]);//4 System.out.println("m.a ="+m.a);//0 System.out.println("m.b ="+m.b);//1 System.out.println("m.c[2] ="+m.c[2]);//4 } } Box nの中のn.aの値はわかります。 ですが、Box mの中のn.aは、a がstaticフィールド(?)なので元の0に戻りますが、m.aがなぜ0なのかわかりません。 そもそもstatic int = ●; のときは、静止的intと教わったのですが、どういう現象が起こるのかいまいちです。 よろしくお願いします。
- ベストアンサー
- Java
- すいません。超初心者です…。
今、プログラミングの練習をしています。言語はjavaです。独学なので、立ち止まったら対処ができません。一応、本の通りにやっているつもりなのですが… 本を書き写した所、コンパイル(コンパイラ?、インタープリタ?)が出来ません。 お分かりの方がいらっしゃいましたら、是非ご教授下さい。お願いします。 class Test{ int i = 10; int j = i * 2; int sum(int m){ return j + m; } int sum3(int m,int n){ int k = sum(3); return m + n + k; } } public class sample31{ public static void main(String[] args) { Test t = new Test(); System.out.println("tオブジェクトのメソッド" + "sum3(1,5)の結果:" + t.sum3(1,5)); } } ちなみにエラーの文は、 C:\Source>java sample31 Exception in thread "main" java.lang.NoSuchMethodError: Test.sum3(II)I at sample31.main(sample31.java:17) という風に出ています。(意味は分かりませんが…)
- ベストアンサー
- Java
- どこがダメなんでしょう
入力した数字 1 2 3 4 を -2 1 1.5 -1 と出力したいんです public class Re1{ public static void main(String args[]){ double n1=Double.parseDouble(args[0]); double n2=Double.parseDouble(args[1]); double n3=Double.parseDouble(args[2]); double n4=Double.parseDouble(args[3]); double a=n1*n4-n2*n3; double b=1/a; double q[][]={{n4,-n2}, {-n3,n1}}; double l[][]=new double[2][2]; for(int i=0; i<l.length; i++){ for(int j=0; j<l[i].length; j++){ l[i][j]=0; l[i][j]=b*q[i][j]; } } for(int i=0; i<l.length; i++){ for(int j=0; j<l[i].length; j++){ System.out.print(l[i][j]+" "); } System.out.println(); } } } お願いします。
- 締切済み
- Java
- switch で疑問。java超初心者です。
まず、 public class P1{ public static void main(String[] args){ int n = 1; switch(n){ case 0: System.out.println("あ"); break; case 1: System.out.println("い"); break; case 2: System.out.println("う"); break; default: System.out.println("え"); } } } は、当然「い」と表示されますよね。 default: をcase 3:にしても、問題なく「い」と表示されました。 そこで、こんな風にしてみました。 public class P3{ public static void main(String[] args){ int n = 1; String s; switch(n){ case 0: s="あ"; break; case 1: s="い"; break; case 2: s="う"; break; default: s="え"; } System.out.println(s); } } これは「い」と表示されましたが、 default: をcase 3:にすると、エラーとなってしまいます。なぜでしょう。 ちなみに、エラーの内容は 変数 s は初期化されていない可能性があります。 System.out.print(s); ^ というものでした。 そこで、 変数 s を初期化してみようと、次のように変数 s の宣言の後に null を代入しました。 String s=null; すると、「い」と表示され、エラーは出ません。 なぜ、このようになるのでしょうか。 String型の変数を使っていて、今まではこのようなエラーは出た事が無かったのですが、 どうやらswitch文の中では、初期化しろ、と出てくるようです。 わかり易い解説をいただければと思います。 これは仕様だということで、この通り受け入れるしかないのでしょうか。 勉強していて、少々腑に落ちないので、質問致しました。 よろしくお願いいたします。
- ベストアンサー
- Java
- Java比較演算子はどちらのほうが早いですか。
「より大きい(>)」と「以上(>=)」はどちらのほうが早いですか。 ハノイの塔の再帰を使って実験してみたところ「より大きい」が遅いという結果になりました。 より大きいは再帰が苦手?ソースが間違ってる?... などと気になったので投稿しました。 プログラミング初心者なのでお手柔らかにお願いします。 以下が使ったソースです。 public class Main{ public static void hanoi(int n, char a, char b, char c){ if(n > 0){ hanoi(n -1, a, c, b); //System.out.println(a + "から" + b + "へ"); hanoi(n -1, c, b, a); } } public static void hanoi2(int n, char a, char b, char c){ if(n >= 1 ){ hanoi(n -1, a, c, b); //System.out.println(a + "から" + b + "へ"); hanoi(n -1, c, b, a); } } public static void main(String[] args){ int count = 0; int count2 = 0; long ns = 0; long n1 = 0; long n2 = 0; while(count2 < 5){ count++; long start = System.nanoTime(); hanoi(3, 'A', 'B', 'C'); long end = System.nanoTime(); long start2 = System.nanoTime(); hanoi2(3, 'A', 'B', 'C'); long end2 = System.nanoTime(); n1 += (end -start); n2 += (end2 -start2); ns = n1 -n2; if(ns > 0) count2++; } System.out.println("「> 」平均:" +(n1 /count)+"ns"); System.out.println("「>=」平均:" +(n2 /count)+"ns"); } }
- 締切済み
- Java
- java初心者なのですが
java初心者なのですが クラスの配列を使用して配列の配列を作りたいのですが class B { double a[]; } class A{ public static void main(String[] args){ B[] a =new B[3]; for(int i=0;i<3;i++){ a[i]=new B(); } a[0].a[0]=3; ・・ここでエラー a[0].a[50]=9; a[0].a[100]=100; a[1].a[200]=150; a[2].a[300]=250; System.out.println("a[0].a[0]="+a[0].a[0]); System.out.println("a[0].a[50]="+a[0].a[50]); System.out.println("a[0].a[100]="+a[0].a[100]); System.out.println("a[1].a[200]="+a[0].a[200]); System.out.println("a[2].a[300]="+a[1].a[300]); } } ここでエラーと書いたところでjava.lang.NullPointerExceptionというエラーが出ます。 何が間違えているのでしょうか?どうのようにすればエラーがなくなるのか教えてください。
- ベストアンサー
- Java
- 配列に値を入れて表示させたいが
import java.util.*; class Sample{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print("クラス数:"); int n = std.nextInt(); int[][]a = new int[n][]; System.out.print("1組の人数"); int m = std.nextInt(); for(int i=0;i<m;i++){ a[i] = std.nextInt(); //ここの部分でコンパイルエラー System.out.println("(i+1)"+"組"+(i+1)+"番目の点数"+a[i]); } } } 互換性のない型?と出ますなぜでしょう
- ベストアンサー
- Java
- (汎用的に)行列の積を求めるプログラム
L*M実行列A , M*N実行列B , M*N実行列C を引数として、A*BをCに代入するプログラムを作りたいと思っています。 具体的には、エラーがでるのはわかっていますがイメージとして void multiply(int L,int M,int N,double A[L][M],double B[M][N],double C[L][N]) { for(int l=0;l<L;l++) for(int n=0;n<N;n++) C[l][n]=0; for(int l=0;l<L;l++){ for(int m=0;m<M;m++){ for(int n=0;n<N;n++) C[l][n]+=A[l][m]*B[m][n]; } } } という感じです。Cを自分なりに学習したところ、「2次元配列を渡すには行or列数が少なくとも既知でないといけない」のは知識として得ているのですが、ではこの問題を回避して所望のプログラムを書け、と言われると行き詰ってしまいました。 卒論をするにあたり、種々のサイズの行列演算が必要なので、できるだけ効率的な関数を書いておきたいのですが、どうすれば一般の行列の積の演算が可能になるのでしょうか?
- ベストアンサー
- C・C++・C#
- JAVA初心者です。
以下の文法でコンパイルエラーが出ます。 添削をお願いします。 import java.util.Random; public class Test{ public static void main(String[] args){ int n; for (n = 0; n < 200; n++){ int i; for (i = 0; i < 38; i++) { Random rnd = new Random(); int ran = rnd.nextInt(10); System.out.print(ran); System.out.print(" "); for (t = 0; t < 200; t++) } System.out.println(); } } }
- ベストアンサー
- Java
お礼
とてもわかりやすい回答をありがとうございました。 ほかの言語の話も参考になりました。 >ケースにもよりますが 計算の時の(暗黙の)ルールというのはプログラミングの上で結構重要です。 納得いくまで確認するのがよいと思います。 ありがとうございます。そうします。