Почему мой цикл Java "for" немедленно заканчивается? - PullRequest
0 голосов
/ 27 марта 2011

Кажется, мой первый цикл правильно строит массив, и когда я иду распечатывать результаты во втором цикле «for», он немедленно завершается. Я не вижу ошибки. Вот код:

public class CoinFlip 
{
    private static int Flip()
    {
        return (int)(2*Math.random());   //returns 0 or 1; 0=Tails,1=Heads 
    }
    public static void main(String args[])
    {
        int HEADS = 1;
        int[] ConsecArray = new int[1000];   // the odds of ever having more than 1000 HEADS consecutively flipped are nil
        int Sequencecounter = 0;
        for (int i = 0; i < ConsecArray.length; i++)
        {
            if (Flip() == HEADS)
            {
                Sequencecounter++;
            }
            else    // we have a TAILS
            {
                // Check sequence counter, if > 0, logging to do...
                if (Sequencecounter > 0)
                {
                    // Update length counters
                    int index = Sequencecounter - 1; 
                    ConsecArray[index]++;
                    Sequencecounter = 0;
                }
                    // consecutive tails, continue in loop
            }
        }
        int j = ConsecArray.length;
        System.out.println("Length" + "     " + "NumberRunsOfHeads");
        for (int k = 0; k == j; k++)
        {
            int index = k + 1;
            String bucketName =  Integer.toString(index);
            String bucketValue = Integer.toString(ConsecArray[k]);
            System.out.println(bucketName + "     " + bucketValue);
        }
    }
}

Ответы [ 6 ]

5 голосов
/ 27 марта 2011

Первая итерация вашего второго цикла:
k равно 0
j равно 1000
тест k == j не пройден
цикл никогда не выполняется

2 голосов
/ 27 марта 2011

Изменить

for (int k = 0; k == j; k++)

на

for (int k = 0; k < j; k++)
1 голос
/ 27 марта 2011

Это:

for (int k = 0; k == j; k++)

Должно быть так:

for (int k = 0; k < j; k++)
1 голос
/ 27 марта 2011

Вместо for (int k = 0; k == j; k++) (что эквивалентно if (k == j)) вы намеревались написать или for (int k = 0; k < j; k++), то есть цикл j раз, а не цикл до тех пор, пока k == j.

1 голос
/ 27 марта 2011

Я думаю, вы имеете в виду либо k <= j, либо k < j, но вы ставите k == j. Это не так во время первой итерации, поэтому тело цикла никогда не выполняется.

    for (int k = 0; k == j; k++)
    {
        int index = k + 1;
        String bucketName =  Integer.toString(index);
        String bucketValue = Integer.toString(ConsecArray[k]);
        System.out.println(bucketName + "     " + bucketValue);
    }
0 голосов
/ 27 марта 2011

Кетт_чуп прав. Я думаю, что вы хотите "K

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...