2016-02-08 3 views
1

Heads up, это небольшая небольшая часть школьного проекта, и поэтому я попытался не просить вас, ребята, просто написать код для меня.JAVA не входит в цикл

как основа: Я пытаюсь заполнить этот массив char[][] спирально, я думаю, что у меня есть алгоритм, который будет работать, как это часто бывает ... его не работает.

Но сейчас у меня возникают проблемы с вводом и выполнением кода в этом цикле. здесь небольшой фрагмент ...

В этом конкретном примере я бег k является char[] массивом, который является длиной 10 и pT является char[] массивом длиной 92

box2 = new char[height][k.length]; 
    int c = 0; 
    int limit = pT.length; //ensures the while loop doesint attempt to populate past the array bounds 
    int w = k.length; //width of array 
    int h = height; //height of array 
    //these two variable i am trying to use to count how many blocks are 
    //filled on the outside of the spiral. 
    //example.. as the spiral populates inward, it can no longer travel the entire 
    //length of the array, but one less block for every pass 
    int difH = 0; //difference in height 
    int difW = 0; //difference in width 
    while (limit > 0) { 

     for (int n = 0; n < (w - (w - difW)); n++) { 
      box[h - (h - difH)][n] = pT[c]; 
      limit--; 
     } 
    } 

по какой-либо причине, когда Я прохожу через код в netbeans, он не вводит или не выполняет это для цикла или любого из трех других.

Может ли кто-нибудь помочь мне выяснить, почему мой код не вводит или не исполняет этот цикл?

В случае, если вы хотите, чтобы увидеть все время цикла:

while (limit > 0) { 

     for (int n = 0; n < (w - (w - difW)); n++) { 
      box[h - (h - difH)][n] = pT[c]; 
      limit--; 
     } 
     difH--; 
     for (int n = h - (h - difH); n > 0; n--) { 
      box[n][w - (w - difW)] = pT[c]; 
      limit--; 
     } 
     difW--; 

     for (int n = w - (w - difW); n > 0; n--) { 
      box[h - (h - difH)][n] = pT[c]; 
      limit--; 
     } 
     difH--; 
     for (int n = 0; n < h - (h - difH); n++) { 
      box[n][w - (w - difW)] = pT[c]; 
      limit--; 
     } 
     difW--; 

    } 

    //Prints box2 
    //prints the box array 
    int counter2 = 0; 
    for (int column = 0; column < box2.length; column++) { 
     if (column > 0) { 
      System.out.print("|"); 
     } 
     System.out.println(); 
     for (int r = 0; r < box2[column].length; r++) { 

      System.out.print("|" + box2[column][r]); 
     } 
    } 
    System.out.println("|\n"); 

Если я облажался за все понятности (как это вполне возможно), пожалуйста, дайте мне знать, и я буду редактировать или, возможно, пересмотреть мое алгоритм.

+2

Для дальнейшего использования, хороший способ отладки таких проблем - это просто напечатать некоторую выходную печать «System.out.println (n)» и т. Д. В случае Java, чтобы вы знали, что происходит, и можете построить логика, как программа работает в вашей голове, и увидит, где-то неправильный номер. – Smar

ответ

3

n < (w - (w - difW)) всегда ложно:

(w - (w - difW)) = (w-w+difW) = (0+difW) = difW 

но вы установили difW быть 0, п равным 0, и 0 < 0 ложна

+0

конечно ..... хорошо спасибо за помощь, я предполагаю, что им просто грустное утро haha ​​ –

+1

@ R.Hull, если это ответит на ваш вопрос, объявите его как решение. –

+1

@fillpant У нас есть несколько ответов с тем же решением – xdevs23

3

Это:

(w - (w - difW)) 

вычисляет + difW который равен 0. Таким образом:

n < (w - (w - difW)) 

имеет значение:

n < 0 

Таким образом, если п не меньше нуля петля никогда не будет введен.

0

В вашем коде diffW равен 0, когда вы вводите цикл. Это делает условие:

w - (w - 0) или (w - w), следовательно 0, который не прошел проверку петли.

2

Ваша проблема кажется:

int difW = 0; // this is 0 
while (limit > 0) { 
    // Problem is here 
    for (int n = 0; n < (w - (w - difW)); n++) { 
     box[h - (h - difH)][n] = pT[c]; 
     limit--; 
    } 
} 

difW является 0. w - это что-то, скажем, это 50. Вы написали (w - (w - difW)), что приводит к: (50 - (50 - 0)), что просто 50 - 50 и равно 0. int n = 0 - это то же самое, что и (w - (w - difW)).Вы написали ... n < (w - (w - difW) ..., поэтому условие всегда ложно из 0 < 0 является false и ваш for цикл только запускается на выполнение, если n меньше (w - (w - difW))(w - (w - difW)), но не меньше, чем n.

Поэтому вам нужно изменить difW на что-то большее, чем 0.

Смежные вопросы