プログラミング初心者ですが、個人的にJavascriptでタイピングソフトを作っています。
色々と調べながら作ってきたのですが、どうしても問題の出題を重複しないようにするプログラムがわかりません。どなたか御教授お願い致します。
参考に現在の出題方法を記載しておきます↓
mondai=new Array();
mondaij=new Array();
mondailist=new Array();
mondailist="しゅんかしゅうとう,じゃくにくきょうしょく
,ごんごどうだん,あびきょうかん,";
kanjilist="春夏秋冬,弱肉強食,言語道断,阿鼻叫喚";
}
function typetest(){
empty();
mondaia=mondailist.split(",");
mondaib=kanjilist.split(",");
function putsellect(){//問題選出関数
randompar=Math.floor(Math.random()
*mondai.length);
sellect=mondaia[randompar];
japan=mondaib[randompar];
}
No.4ベストアンサー
- 回答日時:
どこまで意図通りに動作しているのかを確認しましょう
問題と回答を splitで分割していますがこの分割後の保存している変数はどこで宣言しているのでしょう
また typetestで分割した変数と putSelectで出力用に使っている変数と食い違っているように思います
typetestでは mondaiとmondaijに格納しています
putSelectではmondaiaとmondaibで参照しています
どちらかに統一する必要があります
またこの変数はどこで定義したのでしょう
使用する変数は varで宣言して使ったほうがいいように思います
# 変数宣言しなくても使えてしまうので変数名のタイプミスなどを
# 発見しにくいですけど
関数内で定義したローカル変数は 別の関数無いでは参照出来ません
var Test1 = "A";
function foo() {
var Test2, Test3;
Test2 = "B";
Test3 = bar();
}
function bar() {
return Test1 + Test2;
}
とあった場合 Test1はグローバル変数になり fooかbarの関数の中からもアクセス出来ます
しかし Test2,Test3は 関数fooのローカル変数になりますので 関数fooの中でのみ使用可能な変数です
Test3 = bar();設定される内容は"AB"ではなく"A"となります
なぜなら 関数barのなかまたはグローバル変数にTest2の定義(または代入)が無いためです
javascriptでタイピングソフトを作る講座を見ながら行なったので、自分でもまだ理解できてない部分が多々ありまして。質問されたことにお答えできない私が本当に情けないです。
もう少し勉強をしてからredfox63さんの回答をもう一度見直そうと思います。ご親切にここまでお付き合い頂いて感謝しております。
そのお気持ちに応える事ができず悔しい限りです。
本当に申し訳ありません。
ありがとうございましたm(_ _)m
No.3
- 回答日時:
makeArrayはtypetest関数の外で定義します
var ar, nar;
function makeArray(mondai){
// 先の投稿の内容
}
function typetest() {
mondai=mondailist.split(",");
mondaij=kanjilist.split(",");
makeArray( mondai );
for( n = 0; n < mondai.length; n++ ) {
putSelect( n );
}
}
といった具合に使います
# セレクトのつづりは SellctではなくSelectだと思いますよ
ここまでお付き合い頂き、本当に有難う御座います。
スペルミスのご指摘をありがとうございます。
何度も何度もお答え頂いているにも関わらず、どうしてもエラー発生や動作しなくなるといった現象が起こるので今回の私の記述を最後に、ご覧頂いてミスを指摘して頂きたいと存じます。
var ar, nar;
function makeArray(mondai){
var n, m, t;
ar = new Arrray();
nar = new Array();
// 乱数と順序用の配列を初期化
for ( n = 0; n < mondai.length; n++ ) {
ar[n] = math.random();
nar[n] = n;
}
// ここでソートを行う
for( n = 0; n < mondai.length -1; n++ ) {
for ( m = n + 1; m < mondai.length; m++ ) {
if ( ar[n] > ar[m] ) {
t = ar[n]; ar[n] = ar[m]; ar[m] = t;
t = nar[n]; nar[n] = nar[m]; nar[m] = t;
}
}
}
}
}
function typetest(){
mondai=mondailist.split(",");
mondaij=kanjilist.split(",");
makeArray( mondai );
for( n = 0; n < mondai.length; n++ ) {
putSelect( n );
}
}
function putselect( n ) {
select = mondaia[ nar[n] ];
japan = mondaib[ nar[n] ];
}
本当に申し訳ありません。
宜しくお願い致します。
No.2
- 回答日時:
最終的にはご提示のコードのrandamparの部分をnar[n]に置き換えるということになります
初期化処理時にmakeArrayを呼び出してnarを作成します
putselect()関数に何番目の問題なのかのパラメータ付け加えます
function putselect( n ) {
select = mondaia[ nar[n] ];
japan = mondaib[ nar[n] ];
}
といった具合に呼び出せばいいでしょう
ご親切にどうもありがとうございます。
ご説明して頂いた通りに入れたつもりなのですが、どうしてもエラーが発生して問題が出題されません。これはどこに問題があるのでしょうか?申し訳ありませんがまた回答お願いいたします。
mondai=new Array();
mondaij=new Array();
mondailist=new Array();
mondailist="しゅんかしゅうとう,じゃくにくきょうしょく
,ごんごどうだん,あびきょうかん";
kanjilist="春夏秋冬,弱肉強食,言語道断,阿鼻叫喚
}
function typetest(){
empty();
mondai=mondailist.split(",");
mondaij=kanjilist.split(",");
var ar, nar;
function makeArray(modai) {
var n, m, t;
ar = new Arrray();
nar = new Array();
// 乱数と順序用の配列を初期化
for ( n = 0; n < mondai.length; n++ ) {
ar[n] = math.random();
nar[n] = n;
}
// ここでソートを行う
for( n = 0; n < mondai.length -1; n++ ) {
for ( m = n + 1; m < mondai.length; m++ ) {
if ( ar[n] > ar[m] ) {
t = ar[n]; ar[n] = ar[m]; ar[m] = t;
t = nar[n]; nar[n] = nar[m]; nar[m] = t;
}
}
}
}
function putsellect(n){//問題選出関数
sellect=mondai[ nar[n] ];
japan=mondaij[ nar[n] ];
}
No.1
- 回答日時:
順序用の配列と乱数用の配列を用意して
順序用の配列を乱数用の配列を元にソートしてみればいいのではないかと思います
var ar, nar;
function makeArray(modai) {
var n, m, t;
ar = new Arrray();
nar = new Array();
// 乱数と順序用の配列を初期化
for ( n = 0; n < mondai.length; n++ ) {
ar[n] = math.random();
nar[n] = n;
}
// ここでソートを行う
for( n = 0; n < mondai.length -1; n++ ) {
for ( m = n + 1; m < mondai.length; m++ ) {
if ( ar[n] > ar[m] ) {
t = ar[n]; ar[n] = ar[m]; ar[m] = t;
t = nar[n]; nar[n] = nar[m]; nar[m] = t;
}
}
}
}
nar[n] に重複しない乱数が生成可能ですよ
お早い回答をありがとう御座います。
大変申し訳ないのですが、記述して下さったプログラムは質問に書いてあるプログラムのどの部分に入れれば良いのですか?大変恐縮ですが、続けてお答え願えますでしょうか。
本当に初心者で申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- 中国語 中国語のピンイン表記 2 2022/04/29 01:51
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Java Java 配列<選挙> 4 2023/07/31 15:07
- JavaScript gasについて 1 2022/05/31 21:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#テキストボックスの文字を配...
-
同じIDで定義した要素の配列を...
-
二次元配列の全要素の全要素を...
-
Javaについて質問です。 要素数...
-
JavaScriptで配列を取得したい
-
JavaScriptでの動的な多次元配...
-
javascript 配列 変数名「arra...
-
JavaScriptにおける[] とか :...
-
jQueryで文字数カウンタ(複数...
-
Perlの配列をJavaScriptに渡せ...
-
jspからjavascriptの変数引継ぎ
-
配列の1要素を代入した変数を使...
-
Boolean型配列中のTrueの有無を...
-
ActiveXobjectが作成できない
-
JavaScript window.openで開く...
-
<a>タグのテキストを取得
-
スマフォではボタンを表示させ...
-
翌月を取得するGASが分かりません
-
なぜmatchメソッドがエラーにな...
-
javascriptで、表示されている...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
C#テキストボックスの文字を配...
-
React hooksが値を返して配列変...
-
オブジェクトから任意のプロパ...
-
javascript 変数名の連結をしたい
-
jspからjavascriptの変数引継ぎ
-
配列の1要素を代入した変数を使...
-
JavaScriptにおける[] とか :...
-
フォーム入力値の重複チェック
-
javascriptで行を抽出したいです。
-
undefinedを表示させない方法は...
-
javascriptで2つのArrayの...
-
WSH(Jscript)でファイル一覧
-
JavaScriptでの動的な多次元配...
-
Perlの配列をJavaScriptに渡せ...
-
[JS] setAttributeで保存される...
-
JSONデータを50音順でソートしたい
-
二次元配列の全要素の全要素を...
-
javascriptを用いて作成された...
-
バナーのランダム表示(複数、...
おすすめ情報