2016-02-14 55 views
0

因此,我應該創建一個嵌套的'for循環',它遍歷x(列)和y(行),直到用戶輸入的大小形成一種模式,並生成一個有趣的模式(使用x和y值來作出決定),將三個用戶提供的字符放置在二維網格中。「無法讓我的輸入在javascript中顯示行和列

我大部分都遇到了問題行和列我一直得到一列和太多的行後它發佈三個字符輸入它開始打印undefined和NaN我不知道爲什麼,但這裏是代碼的一部分與其他註釋掉的代碼我是試圖去上班。

<html> 
    <head> 
     <title> Lab </title> 
    </head> 
    <style> 
    </style> 
    <body> 
     <h1> </h1> 
     <p id= 'myParagraph'> My Paragraph! </p> 
    </body> 
    <script> 

    //prompt user to enter 3 characters 
    var charOne = prompt('Enter a character.'); 
    var charTwo = prompt('Enter another character.'); 
    var charThree = prompt('Enter one last character.'); 
    console.log(charThree); 

    //prompt user for pattern size 
    var size = prompt('I will generate a pattern for you. Give me a size.'); 

    //check 
    console.log('Still going.'); 

    //loops until number is givin 
    while (isNaN(size) === true){ 
     if(isNaN(size) === true){ 
     alert('Not a number!'); 
     size = prompt('Give me a number.'); 
     } else { 
     } 
    } 
    console.log('Outta the loop'); 

    //nested for loop for pattern 
    /* for(var x = 0; x < size; x++) { 
     for(var y = 1; y < size; y++){ 
     document.write(charOne,charTwo,charThree + '<br>'); 
     } 
    } 
    */ 
    // console.log('Outta nested loop'); 

    /* 
    var cols = []; 
    var rows = size; 
    for (var i = 0; i < rows; i++){ 
     cols[i] = []; 
    }*/ 

    /* 
    var iMax = size; 
    var jMax = size; 
    var f = [charOne,charTwo,charThree]; 

    for(i = 0; i < iMax; i++) { 
     f[i] = [charOne,charTwo,charThree]; 
     for(j = 0; j < jMax; j++) { 
      f[i][j] = 0; 
      document.write(charOne,charTwo,charThree + '<br>'); 
     } 
     } 
    */ 

    //an arry to make a pattern 
    chars = [charOne, charTwo, charThree]; 

    for(var x = 0; x < size; x++){ 
     for(var y = 1; y < size; y++){ 
      document.write(chars[x] + chars[y] + '<br>'); 
     } 

    } 


    </script> 

</html> 
+0

您能提供一組輸入的預期輸出嗎? – eltonkamami

+0

你可以畫一個基本的例子嗎? –

+0

「形成某種模式,並生成一個有趣的模式」你想列出所有的組合? – Obsidian

回答

0

我真的不明白你試圖在這裏實現什麼,(你應該給我們你希望得到的結果的一個例子),但我在你的循環上的問題已經看到:

chars = [charOne, charTwo, charThree]; 

for(var x = 0; x < size; x++){ 
    for(var y = 1; y < size; y++){ 
     // Here you take the xth and yth indexes 
     // of the chars Array which only has 3 entries 
     // document.write(chars[x] + chars[y] + '<br>'); 
     // You could try this: 
     document.write(chars[0] + chars[1] + '<br>'); 
    } 
} 
0

可以說,我已經進入ABC,因此chars = ['A', 'B', 'C'],假設我已經進入了size爲5,則獲得chars會去如下:

chars[0] = 'A' 
chars[1] = 'B' 
chars[2] = 'C' 
chars[3] = undefined 
chars[4] = undefined 

正如你所看到的,你有一個指數出來的界限錯誤在這裏。

如果我正確理解你,你想要打印網格中每個單元格上的字母?如果沒有,那麼請讓我知道,如果是那麼這應該解決它:

for(var x = 0; x < size; x++) { 
    for(var y = 1; y < size; y++){ 
     document.write(charOne + charTwo + charThree + '<br>'); 
    } 
} 
0

的問題是,你的循環可以通過未定義數組元素迭代。例如,如果輸入數字a,b,c並且某人輸入5作爲大小,那麼您可以嘗試打印僅具有3 [0,1,2]大小的數組的值, [0,1,2,3,4]。 Char [3]和Char [4]不存在。我建議大小是循環外部,並使用Char []數組(3)的大小限制兩個內部循環。在你的情況設置內部循環通過char.length來避免未定義。

chars = [charOne, charTwo, charThree]; 
    for (var z = 0; z < size; z++) { 
     for (var x = 0; x < chars.length; x++) { 
      for (var y = 1; y < chars.length; y++) { 
       document.write(chars[x] + chars[y] + '<br>'); 
      } 
     } 
    }