Java计数最长的数组

时间:2013-12-06 04:52:21

标签: java arrays count

我正在做一个抛硬币计划,并且我正在尝试确定被抛出的最长的头部或尾部。我已经有了用于确定折腾是否是头部或尾部的代码,但现在需要计算最长的运行时间。救命!这是我的基本程序代码。

    public static void coin_toss(char [] toss)
    {
        int s = 0;
        try
        {
            for (s = 0; s <= toss.length; s++)
            {
                double flip;
                flip = (double)(Math.random());
                if (flip < 0.5)
                    toss[s] = 't';
                else
                    toss[s] = 'h';
            }//end of for loop to load array
        }
        catch (ArrayIndexOutOfBoundsException errorMessage)
        {
            System.out.println("\nSubscript out of bounds");
            System.out.println("Subscript went past the limit of " + toss.length);
            System.out.println("Last value of subscript was --> " + s);
            System.out.println("-------------------------------------------------");
            System.out.println(errorMessage);
            System.out.println("-------------------------------------------------");
        }
    }//end of toss coin

    public static double percent_heads (char [] toss)
    {
        double percent_h;
        int heads = 0;
        for (int s = 0; s < toss.length; s++)
        {
            if (toss[s] == 'h')
            heads = heads + 1;
        }
        System.out.println("There were " + heads + " heads results");
        percent_h = (double)heads / toss.length;
        return (percent_h);
    }//end of heads percentage function

    public static double percent_tails (char [] toss)
    {
        double percent_t;
        int tails = 0;
        for (int s = 0; s < toss.length; s++)
        {
            if (toss[s] == 't')
            tails = tails + 1;
        }
        System.out.println("There were " + tails + " tails results");
        percent_t = (double)tails / toss.length;
        return (percent_t);
    }//end of tails percentage function

    public static void main(String [] args)
    {
        int num_toss = 0;
        double heads, tails;
        double percent_t, percent_h;
        DecimalFormat percent = new DecimalFormat ("#0.00%");

        System.out.print("How many tosses would you like? --> ");
        num_toss = GetInput.readLineInt();
        char [] toss = new char[num_toss];

        System.out.println("You chose " + toss.length + " tosses");
        coin_toss(toss);
        heads = percent_heads(toss);
        tails = percent_tails(toss);
        System.out.println("The percentage of heads was --> " + percent.format(heads));
        System.out.println("The percentage of tails was --> " + percent.format(tails));
        longest_toss(toss);
        java.util.Date today = new java.util.Date();
        System.out.println("\nProgram terminated at " + today);
        System.exit(0);
    }//end of main method
}//end of class

3 个答案:

答案 0 :(得分:1)

我想出了一种方法。

public static void longest_toss(char[] toss){
        int longestrun = 0;
        int curlongestrun = 0;
        char prevrun = toss[0];

         for (int s = 1; s < toss.length; s++)
         {
             if (toss[s] == prevrun) {
                 curlongestrun++;
             }else {
                 curlongestrun=0;
             }
             if(curlongestrun>longestrun){
                 longestrun = curlongestrun;
             }
             prevrun = toss[s];
         }
         System.out.println("Longest run is : " + longestrun + " Coin side : " + prevrun);
    }

答案 1 :(得分:0)

您可以将数组toss[]的最大索引设为Integer.MAX_VALUE - 8

这里它少了8,因为在java.util.ArrayList类的源代码中,明确提到MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8,如果你有足够的内存来保存包含这么多数据的数组内容。

答案 2 :(得分:-1)

int getLongestHeads(char [] toss){

int longestHeads = 0;

for(char c : toss)
{

if(longestHeads > 0 && c == 'h'){
longestHeads = longestHeads + 1;
}
else{
longestHeads = 0;
}


if(c == 'h' && longestHeads == 0) {
longestHeads = 1;
}

}

return longestHeads;
}