У меня есть вопрос относительно моего Java-проекта. В школе мы начали писать метод bubblesort, который должен сортировать список целых чисел, а затем сортировать их графически. Тем не менее, моя проблема в том, что мы должны были закончить ее дома, и я, похоже, застрял с одной маленькой штукой.Java BlueJ Bubblesort
Это весь код моего Bubblesort
класса:
import java.util.Random;
/**
* Write a description of class Bubblesort here.
*
* @author Aaron Zwickenpflug
* @version 30.01.2017
*/
public class Bubblesort {
private Random random;
private int maxSquare;
private int maxRandom;
private int[] x;
private Square[] square;
public Bubblesort() {
this.random = new Random();
this.maxSquare = 100;
this.maxRandom = 200;
this.x = new int[this.maxSquare];
this.square = new Square[this.maxSquare];
for (int i = 0; i < this.maxSquare; i++) {
this.square[i] = new Square(i, x[i]);
this.x[i] = random.nextInt(maxRandom);
this.square[i].changeY(x[i]);
// System.out.println(this.x[i]);
}
}
public void redraw() {
for (int i = 0; i < this.maxSquare - 1; i++) {
this.square[i + 1].changeY(this.x[i]);
}
}
public void sort_bubble() {
int m;
for (int i = 1; i < 100; i++) {
for (int y = 0; y < this.maxSquare - i; y++) {
if (this.x[y] > this.x[y + 1]) {
m = this.x[y];
this.x[y] = this.x[y + 1];
this.x[y + 1] = m;
this.square[y + 1].changeY(this.x[i + 1]);
}
}
}
}
}
Вот Square
класс:
import java.awt.*;
/**
* A square that can be manipulated and that draws itself on a canvas.
*
* @author Michael Kölling and David J. Barnes
* @version 2016.02.29
*/
public class Square {
private int xSize;
private int ySize;
private int xPosition;
private int yPosition;
private String color;
private boolean isVisible;
/**
* Create a new square at default position with default color.
*/
public Square(int xPos, int height) {
xSize = 9;
ySize = height;
xPosition = xPos * 10;
yPosition = 1;
color = "green";
isVisible = false;
}
public void changeY(int x) {
this.ySize = x;
makeVisible();
}
/**
* Make this square visible. If it was already visible, do nothing.
*/
public void makeVisible() {
isVisible = true;
draw();
}
/**
* Make this square invisible. If it was already invisible, do nothing.
*/
public void makeInvisible() {
erase();
isVisible = false;
}
/**
* Move the square a few pixels to the right.
*/
public void moveRight() {
moveHorizontal(20);
}
/**
* Move the square a few pixels to the left.
*/
public void moveLeft() {
moveHorizontal(-20);
}
/**
* Move the square a few pixels up.
*/
public void moveUp() {
moveVertical(-20);
}
/**
* Move the square a few pixels down.
*/
public void moveDown() {
moveVertical(20);
}
/**
* Move the square horizontally by 'distance' pixels.
*/
public void moveHorizontal(int distance) {
erase();
xPosition += distance;
draw();
}
/**
* Move the square vertically by 'distance' pixels.
*/
public void moveVertical(int distance) {
erase();
yPosition += distance;
draw();
}
/**
* Slowly move the square horizontally by 'distance' pixels.
*/
public void slowMoveHorizontal(int distance) {
int delta;
if(distance < 0) {
delta = -1;
distance = -distance;
} else {
delta = 1;
}
for(int i = 0; i < distance; i++) {
xPosition += delta;
draw();
}
}
/**
* Slowly move the square vertically by 'distance' pixels.
*/
public void slowMoveVertical(int distance) {
int delta;
if(distance < 0) {
delta = -1;
distance = -distance;
} else {
delta = 1;
}
for(int i = 0; i < distance; i++) {
yPosition += delta;
draw();
}
}
/**
* Change the size to the new size (in pixels). Size must be >= 0.
*/
public void changeSize(int newSize) {
erase();
xSize = newSize;
ySize = newSize;
draw();
}
/**
* Change the color. Valid colors are "red", "yellow", "blue", "green",
* "magenta" and "black".
*/
public void changeColor(String newColor) {
color = newColor;
draw();
}
/**
* Draw the square with current specifications on screen.
*/
private void draw() {
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.draw(this, color,
new Rectangle(xPosition, yPosition, xSize, ySize));
canvas.wait(10);
}
}
/**
* Erase the square on screen.
*/
private void erase() {
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.erase(this);
}
}
}
Теперь проблема заключается в последней строке:
this.square[y + 1].changeY(this.x[i + 1]);
Это нормально (когда я запускаю программу) Измените координату y между 2 квадратами es и «сортировать» его. Хотя это просто испортит графику, и квадраты начинают меняться до каких-то странных значений. Я просмотрел список, который нужно отсортировать, и это работает очень хорошо.
Это как график выглядит как:
Я надеюсь, что кто-то может помочь мне с моей проблемой. Спасибо заранее,
Пожалуйста, отредактируйте ваш вопрос, чтобы включить [mcve] (в основном добавить код «Квадратный класс»), а также добавить ссылку на изображение вашей графики. –
в вашем перерисовом для цикла, почему вы итерации на maxSquare - 1? Вы всегда должны итерации в зависимости от размера коллекции, которую вы итерируете. i
Вы должны установить 'x [i]' перед использованием 'x [i]' в 'new Square (i, x [i]) '(если это не преднамеренно). Я считаю, что массивы 'int' инициализируют каждый индекс до' 0', поэтому вы в основном делаете 'new Square (i, 0)'. –