Мой алгоритм сортировки выбора 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!