оператор if в алгоритме сортировки выбора - PullRequest
0 голосов
/ 14 июля 2020

Мой алгоритм сортировки выбора dr aws 47 отдельных красных вертикальных полос, а затем сортирует их, от меньшего к большему. Что мне теперь нужно сделать, так это определить, находится ли полоса в правильном положении, и, если это так, повернуть полоску в синий цвет. Я думал о том, чтобы поместить этот оператор if в drawBar и написать оператор if, где, если столбец является самым маленьким, а его индекс равен 0, он должен стать синим, а если второй самый маленький столбец имеет индекс 1, тогда и только тогда он должен быть синим (и так далее).

import java.util.*;
import java.awt.*;
import java.applet.*;


public class Lab15st extends Applet
{

    private int numBars;        // number of bars to be sorted
    private int barHeight[];    // array of bar heights
    private int sortDelay;      // delay between comparison iteration

    public void init()
    {
        numBars = 47;
        sortDelay = 50;  // Change to 50 is using the "Selection Sort".
        barHeight = new int[numBars];
        getBarValues();
    }

    public void getBarValues()
    {
        Random rand = new Random(3333);
        for (int k = 0; k < numBars; k++)
            barHeight[k] = rand.nextInt(591) + 10;  // range of 10..600
    }

    public void paint(Graphics g)
    {
        showFrame(g);
        displayBars(g);
        sortBars(g);
    }

    public void showFrame(Graphics g)
    {
        Expo.setBackground(g,Expo.black);
        Expo.setColor(g,Expo.white);
        Expo.fillRectangle(g,20,20,980,630);
    }

    public void drawBar(Graphics g, int k)
    {
      int y2 = 630;
        int x1 = 35 + k * 20;
        int y1 = y2 - barHeight[k];
        int x2 = x1 + 10;
        Expo.setColor(g,Expo.red);
        Expo.fillRectangle(g,x1,y1,x2,y2);
    }
   
    public void eraseBar(Graphics g, int k) // not used in 80 point version
    {
        int y2 = 630;
        int x1 = 35 + k * 20;
        int y1 = y2 - barHeight[k];
        int x2 = x1 + 10;
        Expo.setColor(g,Expo.white);
        Expo.fillRectangle(g,x1,y1,x2,y2);
    }

    public void displayBars(Graphics g)
    {  
        for (int k = 0; k < numBars; k++)
            drawBar(g,k);
    }

    public void swap(Graphics g, int m, int n)  
    {                                           
     Expo.delay(sortDelay);
     
     eraseBar(g,m);
     eraseBar(g,n);
     
     int temp = barHeight[m];
     barHeight[m] = barHeight[n];
     barHeight[n] = temp;
     
     drawBar(g,m);
     drawBar(g,n);
   }
   
    public void sortBars(Graphics g)            
    {                                       
     for (int p = 0; p < numBars; p++)
      {
       int smallest = findSmallestItemIndex(p);
       if (barHeight[p] != barHeight[smallest])
         swap(g,p,smallest);
      }
   }
   public int getItem(int index) { 
     return barHeight[index]; 
    }
   public int findSmallestItemIndex(int start)
   {
     int smallest = start;
     for (int k = start+1; k < numBars; k++)
     if (barHeight[k] < barHeight[smallest])
       smallest = k;
     return smallest;
   }
   }

Вот что задумал сделать:

    {
      int y2 = 630;
        int x1 = 35 + k * 20;
        int y1 = y2 - barHeight[k];
        int x2 = x1 + 10;
        if (a bar is in the correct position)
        Expo.setColor(g,Expo.blue);
        else
        Expo.setColor(g,Expo.red);
        Expo.fillRectangle(g,x1,y1,x2,y2);
    }
I just don't know how to write that if statement :/
Thank you!
...