2017-02-11 8 views
0

xの5x5行列としてユーザ文字列入力を表示するプログラムを作成しようとしています。 だから、ユーザ入力「ABC」場合、結果の出力は、最初の行のためにする必要があります:ユーザ入力に基づいて配列内の要素を表示しようとしています

Expected output

私は現在だけ表示されるa、b、cのためにそれが利用可能になっているだけに、それを拡大します一度コードが動作しているアルファベットのすべての文字。

各行の文字を作るために必要な文字を含む各行に対して配列を作成しました。

ユーザーがABCに入るのであれば、プログラムは[「A」「B」、「C」]文字の配列に入力を分割した後、入力(3)の長さをカウントします。 whileループが始まり、ユーザー入力の最初の要素がどの文字であるかを確認し、alphaRow1配列内の正しい要素と一致させて印刷します。 whileループは、ユーザー入力のすべての要素を通過するまでこれを繰り返します。

私は現在、唯一の最初の行のコードを試みたが、後で他の行を追加します。私は、ユーザー入力に入力

毎回、それは私が「B」or'c」に入力したかどうかに関係なく、「A」のためのalphaRow1要素を思い付きます。私はそれだけで表示されるように間違っている何が起こっているかわからない

Actual output when user input is "abc"

:whileループは、私はABCで入力した場合、それは「」3回alphaRow1要素が表示されますので、正確に繰り返すように見えます毎回最初の要素。 whileループが正しく表示され、正しくインクリメントされているようです。

alphaRow1 = [" x ","xxxx "," xxxx"]; 
alphaRow2 = [" x x ","x x","x "]; 
alphaRow3 = [" xxx ","xxxx ","x "]; 
alphaRow4 = ["x x","x x","x "]; 
alphaRow5 = ["x x","xxxx "," xxxx"]; 

input=prompt("Enter something","Enter here"); 
letterCount=0; 

splitInput = input.split(''); 
inputLength = input.length; 



while (letterCount < inputLength){ //while loop for first row. 
    if (splitInput[letterCount] = 'a'){ //if selected element in user input 
     document.write(alphaRow1[0]); //is 'a' display first element from 
     letterCount++;     //alphaRow1 
    } 
    else if (splitInput[letterCount] = 'b'){ 
     document.write(alphaRow1[1]); 
     letterCount++; 
    } 
    else if (splitInput[letterCount] = 'c'){ 
     document.write(alphaRow1[2]); 
     letterCount++; 
    } 
    else{ 
     document.write("error"); 
    } 
} 

答えて

2

ifおよびelse文にエラーがあります。等価演算子を使用する必要があるときに代入演算子=を使用しています==

+0

ありがとうございます!それはうまくいった! –

+0

解決策を使用して問題が解決されたことを示すために、私の回答を受け入れ済みとマークすることができます。 –

0

コードの問題は、whileループ内でdouble == the```を使用することです。

実際にはifおよびelse ifステートメントの値をオーバーライドしています。

+0

ありがとうございました! –

0

別にあなたがif状態でやっているの割り当てから、あなたもdocument.writeを使用しないでください。代わりに文字列を結果として作成し、ページへの実際の出力を個別に処理します。そのためには、pre要素を使用し、その結果の文字列にtextContentプロパティを設定します。 preは、改行をレンダリングし、ここに必要なモノスペースのフォントを使用します。

また、パターンを表す文字でパターンをキーすると、パターンのデータ構造が使いやすくなります。つまり、その文字の完全なパターンを値として持つプロパティ 'a'を持つオブジェクトを作成します。そうすれば、利用可能な文字と文字のすべての範囲をカバーする必要がある場合、あなたはそれらのすべてを別々のものにする必要はありません。if

ここに推奨コードがあります。やってみて。

// Define your patterns keyed by the letter first, not by the line 
 
var pattern = { 
 
    a: [" X ", 
 
     " X X ", 
 
     " XXX ", 
 
     "X X", 
 
     "X X", 
 
     "X X"], 
 
    b: ["XXXX ", 
 
     "X X", 
 
     "XXXX ", 
 
     "X X", 
 
     "X X", 
 
     "XXXX "], 
 
    c: [" XXXX", 
 
     "X ", 
 
     "X ", 
 
     "X ", 
 
     "X ", 
 
     " XXXX"], 
 
    '?': [" XXX ", 
 
      "X X", 
 
      " X ", 
 
      " X ", 
 
      "  ", 
 
      " X "] 
 
}; 
 

 
// Use split/join and map to gather the output string. Do 
 
// not write with document.write 
 
function getOutput(s) { 
 
    return pattern.a.map(function (_, lineNo) { 
 
     return s.split('').map(function(letter) { 
 
      if (!pattern[letter]) letter = '?' // default 
 
      return pattern[letter][lineNo]; 
 
     }).join(' '); 
 
    }).join('\n'); 
 
} 
 

 
// I/O handling: separated from logic 
 
var input = document.querySelector('input'); 
 
// Use pre element to have monospaced font and render all white space 
 
var output = document.querySelector('pre'); 
 

 
input.oninput = function() { 
 
    // At every change in the input, generate the output 
 
    output.textContent = getOutput(this.value); 
 
}
Input: <input> 
 
<pre></pre>

関連する問題