0

私のプログラムには 3 つの変数があります。これらの変数の 1 つが 100 に達すると、「変数が最初にフィニッシュ ラインに到達した」という単語が表示される必要があります。

2 番目と 3 番目の変数の到着を整理するには、次のようにします。

variable1-arrived first
variable2-finished second
variable3 finished third

ヘルプ!

public Corsa(String name)
{
    this.name = name;
    System.out.println("Start: " + name); 
    System.out.println("---------------");
}

public void run()
{
    while(finita == false)
    {
        try
        {
            avanza = (int) (Math.random()*20+1);
            percorso = percorso + avanza;
            System.out.println(name + " has path " + percorso + " meters");
            if(percorso < 100)
            {
                System.out.println("---------------");
                sleep = (int) (Math.random()*20+1);
                Thread.sleep(sleep);
            }
            else
            {
                System.out.println("---------------");
                System.out.println("---------------");
                System.out.println(name + " came in first"); 
                finita = true;
            }
        }
        catch(InterruptedException e){}
        Thread.yield();
    }
}

}

4

1 に答える 1

1

私はこれをテストしていません (そのため、コンパイルさえできない可能性があります) が、次のようなものが動作するはずです:

public class myRace
{
    private int distance = 100;
    private float offset = 20;
    public int runners[3];

    public void run()
    {
        // Set all runners to 0
        for ( int i = 0; i < runners.length; i++ )
            runners[i] = 0;

        // Run the race and stop when at least 1 runner has reached the distance...
        boolean finished = false;
        while ( !finished )
        {
            for ( int i = 0; i < runners.length; i++ )
            {
                runners[i] += (int)((Math.random() * offset) + 1);
                if ( runners[i] >= distance ) finished = true;
            }
        }
        // Race finished now sort the runners
        TreeMap<String, int> ranking = new TreeMap<String, int>();
        for ( int i = 0; i < runners.length; i++ )
        {
            // A TreeMap is sorted on its key, not the value!
            // The runners number is tagged on, just in case two runners have finished on the same distance.
            String sortedKey = Integer.toString(runners[i]) + "." + Integer.toString(i);
            ranking.put(sortedKey, i);
        }
        // Print the results
        int pos = 1;
        for ( Map.Entry entry : ranking.entrySet() )
        {
            String key = entry.getKey();
            String distance = key.subString(0, key.indexOf(".")); // chop off the "." + runners number.

            System.out.println("#" + pos +    // position
                "." + entry.getValue() +      // who
                ", Distance = " + distance);  // distance covered

            pos++; // this does take in account whether multiple runners finished on the same distance.
        }
    }
}
于 2013-10-07T12:34:51.247 に答える