請問各位java高手
若要求是第一題答對,第二題要再多抽一個音,連同前一題的答案連續播放。
例如第一題是 So,第二題就可能是 So+Re。玩家答題時也要將音符串完
整答對才能繼續進行。
要如何抽取不一樣的亂數並加在前個亂數後呢?
import org.jfugue.player.Player;
import java.util.*;
public class Week16 {
public static void main(String[] args) {
System.out.println("絕對音感記憶遊戲");
System.out.println("請輸入1-8的數字");
Player pp = new Player();
pp.play("C D E F G A B C6");
int ans;
ans=(int)(Math.random()*8);
int ans2=(int)(Math.random()*8);
while(true) {
if (ans==1) {
pp.play("C5qqqq");
}
if (ans==2) {
pp.play("D5qqqq");
}
if (ans==3) {
pp.play("E5qqqq");
}
if (ans==4) {
pp.play("F5qqqq");
}
if (ans==5) {
pp.play("G5qqqq");
}
if (ans==6) {
pp.play("A5qqqq");
}
if (ans==7) {
pp.play("B5qqqq");
}
if (ans==8) {
pp.play("C6qqqq");
}
Scanner sc=new Scanner(System.in);
int guess=sc.nextInt();
if (guess!=ans) {
System.out.println("錯");
break;
}
if (guess==ans) {
System.out.println("對");
pp.play("ans");
pp.play("ans2");
}
}
}
}
public static void main(String[] args) {
System.out.println("絕對音感記憶遊戲");
Player pp = new Player();
pp.play("C D E F G A B C6");
//出題用的list
List<Integer> queList = new ArrayList();
//答題用的list
List<Integer> ansList = new ArrayList();
int count = 1;
while (count > 0) {
Integer note = (int) (Math.random() * 8);
queList.add(note);
play(queList);
System.out.println("請根據所聽到之音符,輸入1-8的數字");
// System.out.println("我是作弊的答案: " +queList);
ansList.clear();
for (int i = 1; i <= count; i++) {
Scanner sc = new Scanner(System.in);
int guess = sc.nextInt();
ansList.add(guess);
}
System.out.println("ansList: " +ansList);
if (queList.equals(ansList)) {
System.out.println("本題答對,繼續挑戰!");
count++;
} else {
System.out.println("答錯,請再接再厲QQ");
count = 0;
}
}
}
static void play(List<Integer> queList) {
Player pp = new Player();
for (Integer ans : queList) {
if (ans == 1) {
pp.play("C5qqqq");
}
if (ans == 2) {
pp.play("D5qqqq");
}
if (ans == 3) {
pp.play("E5qqqq");
}
if (ans == 4) {
pp.play("F5qqqq");
}
if (ans == 5) {
pp.play("G5qqqq");
}
if (ans == 6) {
pp.play("A5qqqq");
}
if (ans == 7) {
pp.play("B5qqqq");
}
if (ans == 8) {
pp.play("C6qqqq");
}
}
}
花了一個半小時重寫
盡量把重複的工作拉出來寫一個function,會比較乾淨
我的思路是,按照你的需求
最好的方法就是用兩個 array , list 或 map
一個放題目,一個放答案,再比較是不是一樣內容
本來是用array來寫
但實在太麻煩,改用list
因為list也有equasls這個方法,可以直接比較其內容,很方便~
本題應該是一定要用到巢狀迴圈
如果有其他大神能用一個迴圈就寫出來
還請伺教