質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

228閲覧

javaで、0と1を識別する表を作りたい

rink

総合スコア80

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/10/21 15:03

0の個数を数えて、次に1の数を数えて、また0の数を数えるプログラムを作りたいのですが、うまくいきません。
x = 0;
y=0;
xZeroCount[y][x] = 0;
xZeroCount2[y][x] = 0;
xOneCount[y][x] = 0;
xOneCount2[y][x] = 0;
xZeroCount3[y][x] = 0;
xZeroCount5[y][x] = 0;
xZeroCount4[y][x] = 0;
xOneCount3[y][x] = 0;
xOneCount5[y][x] = 0;
xOneCount4[y][x] = 0;
for(y=0;y<10;y++){
while( x < 10 && c[y][x]== 0 ) {
xZeroCount[y][x] = xZeroCount[y][x] + 1;
x++;
}
while( x < 10 && c[y][x] == 1 ) {
xOneCount[y][x] = xOneCount[y][x] + 1;
x++;
}
while( x < 10 && c[y][x] == 0 ) {
xZeroCount2[y][x] = xZeroCount2[y][x] + 1;
x++;
}
while( x < 10 && c[y][x] == 1 ) {
xOneCount2[y][x] = xOneCount2[y][x] + 1;
x++;
}
while( x < 10 && c[y][x] == 0 ) {
xZeroCount3[y][x] = xZeroCount3[y][x] + 1;
x++;
}
while( x < 10 && c[y][x] == 1 ) {
xOneCount3[y][x] = xOneCount3[y][x] + 1;
x++;
}
while( x < 10 && c[y][x] == 0 ) {
xZeroCount4[y][x] = xZeroCount4[y][x] + 1;
x++;
}
while( x < 10 && c[y][x] == 1 ) {
xOneCount[y][x] = xOneCount[y][x] + 1;
x++;
}
while( x < 10 && c[y][x] == 0 ) {
xZeroCount5[y][x] = xZeroCount5[y][x] + 1;
x++;
}
while( x < 10 && c[y][x] == 1 ) {
xOneCount5[y][x] = xOneCount5[y][x] + 1;
x++;
}
}
x=0;
y=0;
yZeroCount[y][x] = 0;
yZeroCount2[y][x] = 0;
yOneCount[y][x] = 0;
yOneCount2[y][x] = 0;
yZeroCount3[y][x] = 0;
yZeroCount5[y][x] = 0;
yZeroCount4[y][x] = 0;
yOneCount3[y][x] = 0;
yOneCount5[y][x] = 0;
yOneCount4[y][x] = 0;

for(x=0;x<10;x++){ while( y < 10 && c[y][x] == 0 ) { yZeroCount[y][x] = yZeroCount[y][x] + 1; y++; } while( y < 10 && c[y][x] == 1 ) { yOneCount[y][x] = yOneCount[y][x] + 1; y++; } while( y < 10 && c[y][x] == 0 ) { yZeroCount2[y][x] = yZeroCount2[y][x] + 1; y++; } while( y < 10 && c[y][x] == 1 ) { yOneCount2[y][x] = yOneCount2[y][x] + 1; y++; } while( y < 10 && c[y][x] == 0 ) { yZeroCount3[y][x] = yZeroCount3[y][x] + 1; y++; } while( y < 10 && c[y][x] == 1 ) { yOneCount3[y][x] = yOneCount3[y][x] + 1; y++; } while( y < 10 && c[y][x] == 0 ) { yZeroCount4[y][x] = yZeroCount4[y][x] + 1; y++; } while( y < 10 && c[y][x] == 1 ) { yOneCount[y][x] = yOneCount[y][x] + 1; y++; } while( y < 10 && c[y][x] == 0 ) { yZeroCount5[y][x] = yZeroCount5[y][x] + 1; y++; } while( y < 10 && c[y][x] == 1 ) { yOneCount5[y][x] = yOneCount5[y][x] + 1; y++; } } for(y=0;y<10;y++){ for(x=0;x<10;x++){ System.out.print(""+c[y][x]+" "); } System.out.print("||"+xZeroCount[y][x]); System.out.print(","+xOneCount[y][x]); System.out.print(","+xZeroCount2[y][x]); System.out.print(","+xOneCount2[y][x]); System.out.print(","+xZeroCount3[y][x]); System.out.print(","+xOneCount3[y][x]); System.out.print(","+xZeroCount4[y][x]); System.out.print(","+xOneCount4[y][x]); System.out.print(","+xZeroCount5[y][x]); System.out.print(","+xOneCount5[y][x]); System.out.print("\n"); } System.out.print("-------------------------\n"); System.out.println(yZeroCount[y][x]); System.out.println(yOneCount[y][x]); System.out.println(yZeroCount2[y][x]); System.out.println(yOneCount2[y][x]); System.out.println(yZeroCount3[y][x]); System.out.println(yOneCount3[y][x]); System.out.println(yZeroCount4[y][x]); System.out.println(yOneCount4[y][x]); System.out.println(yZeroCount5[y][x]); System.out.print(yOneCount5[y][x]); } }

表は            
0,0,0,0,0,0,1,0,0,0
0,0,1,1,1,1,0,0,0,0,
0,0,0,0,1,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,
0,0,0,1,1,1,0,0,0,0,
1,1,1,0,1,0,1,1,1,1,
0,0,0,1,1,1,1,0,0,0,
0,0,0,0,1,0,1,1,0,0,
0,0,0,1,0,0,0,1,0,0,
0,0,1,0,0,0,1,1,0,0     です。
このプログラムだと、0と1の個数がすべて0になってしまいます。何がダメなのでしょうか?教えてください…。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2018/10/21 15:07

まず何をしたいのかよくわかりません。連続する0を数えて、そのあと連続する1を数えて…ということですか?あと変数多すぎてどれが何のつもりなのかわかりません。あと、cという謎の変数も登場してますし…
cateye

2018/10/21 15:22

他の方も言われていますが、意味不明です。何がしたいのでしょう?
rink

2018/10/21 15:45

ごめんなさい。全部のプログラムをのせると字数がオーバーしてしまうんです…cというのは配列に用いた記号です。
swordone

2018/10/21 16:00

コードを載せるのが無理なら、まずは質問冒頭で言っている「0の個数を数えて、次に1の数を数えて、また0の数を数える」の意味を明確にしてください。できれば具体例を添えて。また、最後に唐突に出てくる「表」がこの問題とどういう関係を持つのかも説明してください。
y_waiwai

2018/10/21 22:29

コードは<code>ボタン押して’’’の枠の中に貼り付けましょう
guest

回答2

0

ベストアンサー

>このプログラムだと、0と1の個数がすべて0になってしまいます。

ではなく「x」が「10」になるまでは、集計してます。

>何がダメなのでしょうか?

まず、
System.out.print("||" + xZeroCount[y][x]);
の「x」が、その前の「for」後なので「11」で、
java.lang.ArrayIndexOutOfBoundsException。

つぎに、

while (x < 10 && c[y][x] == 0) { xZeroCount[y][x] = xZeroCount[y][x] + 1; x++; } while (x < 10 && c[y][x] == 1) { xOneCount[y][x] = xOneCount[y][x] + 1; x++; } (以下同様)

 なので、xが「++」されて「x」が「10」になったところで、
その後のwhileの「x < 10」が「false」になるので、全パスされる。

x,y軸「0」「1」の数を↓の様に表示したいのでしょうか?

0, 0, 0, 0, 1, 0, 0, 0, 0, 0|| 9, 1 1, 1, 1, 1, 1, 1, 1, 1, 1, 1|| 0,10 0, 0, 0, 1, 1, 1, 0, 0, 0, 0|| 7, 3 1, 1, 1, 0, 1, 0, 1, 1, 1, 1|| 2, 8 0, 0, 0, 1, 1, 1, 1, 0, 0, 0|| 6, 4 0, 0, 0, 0, 1, 0, 1, 1, 0, 0|| 7, 3 0, 0, 0, 1, 0, 0, 0, 1, 0, 0|| 8, 2 0, 0, 1, 0, 0, 0, 1, 1, 0, 0|| 7, 3 ----------------------------- 8, 8, 6, 5, 3, 6, 4, 5, 8, 8 2, 2, 4, 5, 7, 4, 6, 5, 2, 2

であれば、
1)x,y軸「0」「1」の集計ロジックがNGです。
2)x,y軸「0」「1」の数の表示処理がNGです。

↑の表の

java

1package hyou; 2 3public class Hyou { 4 5 public static void main(String[] args) { 6 7 int c[][] = { 8 { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 }, 9 { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0 }, 10 { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, 11 { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, 12 { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 }, 13 { 1, 1, 1, 0, 1, 0, 1, 1, 1, 1 }, 14 { 0, 0, 0, 1, 1, 1, 1, 0, 0, 0 }, 15 { 0, 0, 0, 0, 1, 0, 1, 1, 0, 0 }, 16 { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 }, 17 { 0, 0, 1, 0, 0, 0, 1, 1, 0, 0 } 18 }; 19 20 int x0_count = 0; 21 int x1_count = 0; 22 23 int[] y0_count = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 24 int[] y1_count = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 25 26 String str; 27 28 for (int y = 0; y < 10; y++) { 29 30 x0_count = 0; 31 x1_count = 0; 32 33 for (int x = 0; x < 10; x++) { 34 35 System.out.print(" " + c[y][x]); 36 37 if (x < 9) System.out.print(","); 38 39 if (c[y][x] == 0) { 40 x0_count++; 41 y0_count[x]++; 42 } else { 43 x1_count++; 44 y1_count[x]++; 45 } 46 47 } 48 str = " " + String.valueOf(x0_count); 49 str = str.substring(str.length() - 2); 50 System.out.print("||" + str); 51 52 str = " " + String.valueOf(x1_count); 53 str = str.substring(str.length() - 2); 54 System.out.println("," + str); 55 56 } 57 58 System.out.println("-----------------------------"); 59 60 for (int y = 0; y < 10; y++) { 61 62 str = " " + String.valueOf(y0_count[y]); 63 str = str.substring(str.length() - 2); 64 65 System.out.print(str); 66 if (y < 9) System.out.print(","); 67 68 } 69 70 System.out.println(); 71 72 for (int y = 0; y < 10; y++) { 73 74 str = " " + String.valueOf(y1_count[y]); 75 str = str.substring(str.length() - 2); 76 77 System.out.print(str); 78 if (y < 9) System.out.print(","); 79 80 } 81 82 } 83}

投稿2018/10/22 11:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rink

2019/01/26 06:32

分かりやすくありがとうございます。 解決できました!
guest

0

まず、仕様があやふやですし、コードも読みにくいです。

コードは "<code>"ボタンを押して "ここに言語を入力" のところに 言語名 ( Javaとか )を入力して、
"コード" の部分に書きましょう。
インデントが無視されて非常に読みにくいです。

仕様もわかりにくいです。

表って何ですか? HTMLにJavaを組み込んで tableタグからとってくるのでしょうか?
データベースから取ってくるのでしょうか?
単純にファイルから取ってくるのでしょうか?
プログラム側ですでに多次元配列かリストのリストとかで確保されているという大前提なのでしょうか?

また、表だけ見せられてもその表の意味すらわからないし、"質問への追記・修正の依頼" のところで Swordoneさんも仰っているように具体例がないので...

投稿2018/10/22 01:44

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問