アプリ版:「スタンプのみでお礼する」機能のリリースについて

画像は問題文。
これどこが間違っていますか?

以下コード。

import java.util.Scanner;

public class KJava32 {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[][] count = new int[4][4];
char[] c = { 'ア', 'イ', 'ウ', 'エ' };
int d1, d2;
for (d1 = 0; d1 < 4; d1++) {
for (d2 = 0; d2 < 4; d2++) {
count[d1][d2] = 0;
}
}
System.out.println("問1の解答:");
d1 = scanner.nextInt();

for (int i = 2; i <= 80; i++) {
System.out.printf("問%dの解答:", i);
d2 = scanner.nextInt();
count[d1][d2]++;
d2 = d1;
d1 = d2;
}
for (d1 = 0; d1 < 4; d1++) {
for (d2 = 0; d2 < 4; d2++) {
System.out.printf("%c->%c:%5.1f%%%n", c[d1], c[d2], count[d1][d2] * 100.0 / 79);
}

}
}

}

「Java 4択問題の連続する2問の正解パ」の質問画像

A 回答 (3件)

うん、#2氏の言う通りだなぁ。


基本的には

d2 = d1;

ってのが要らない。

多分、C言語なんかだとまずは列挙体を定義するケースなんだろうけど、生憎Javaは列挙体が使いづらい。
貴方のコードの殆どは間違ってないんだけど、選択肢をア、イ、ウ、エ、として定義する必要がない。と言うか入力が数値な以上、無駄なコードになっている。
数値入力なのか、文字を入力してそれと対応させるのか、とかその辺ハッキリせなアカン。後者はちとややこしい。

// ここから

import java.util.Scanner;

public class KJava32 {
 public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  int[][] count = new int[4][4];
  for (int d1 = 0; d1 < count.length; d1++) {
   for (int d2 = 0; d2 < count[d1].length; d2++) {
    count[d1][d2] = 0;
   }
  }
  System.out.println("問1の解答: ");
  c d1 = c.valueOf(scanner.next()), d2;
  for (int i = 2; i <= 80; i++) {
   System.out.printf("問%dの解答: ", i);
   d2 = c.valueOf(scanner.next());
   count[d1.ordinal()][d2.ordinal()]++;
   d1 = d2;
  }
  for (c x: c.values()) {
   for (c y: c.values()) {
    System.out.printf("P(%s|%s): %5.1f\n", y, x, count[x.ordinal()][y.ordinal()] * 100.0 / 79);
   }
  }
 }
 protected enum c {
  // Java の列挙体はメンド臭い
  ア(0), イ(1), ウ(2), エ(3);

  // フィールドの定義
  private int id;

  // コンストラクタの定義
  private c(int id) {
   this.id = id;
  }
 }
}

// ここまで

これは列挙体を使って、入力がア〜エの文字列の場合なんだけど、貴方の書いたコードと殆ど変わらんのが分かるだろう。
だから間違いはあったけど、及第点ではある、と言う事。
良かったね。

ただ、この計算が統計的にどういう意味があるかは知らん。
「ある先生が人為的に4択問題を作る際の傾向」
とかは分かるかもしれんけどね。
    • good
    • 0

d1 が前問の正解、d2 が入力した正解とするなら、


d2 = d1 はバグ
d1 = d2 の入力値を前問の正解にする代入のみでよい

%n という printf 書式はない
あるのは改行文字のエスケープ表現 \n

できれば
79 とか 80 などの数値を直接書かず、変数化すること
    • good
    • 0

> これどこが間違っていますか?



問題が間違ってるんじゃないの?
そもそも4行4列で何をやりたいんだかサッパリ分からん。
連鎖なんぞこんなので表現出来るのかいな。

・・・数学的にも怪しい問題な気がするんだけど・・・・・・。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!