Как переключить класс в java
Привет кодеры, я хочу, чтобы рефакторинг оператора switch в класс enum. Результат кода: создает коробку и помещает частицы внутрь коробки, затем заставляет частицы свободно двигаться, и если две частицы сталкиваются, то новая частица будет добавлена внутри коробки. Помогите нам сделать несколько подсказок. Еще одно, я знал, когда вставлял свой код сюда (я спросил свою команду, и они согласились), он будет легко скопирован другим человеком. Как я могу предотвратить это? Спасибо.
Что я уже пробовал:
Класс коробки:
import java.util.Random; public class box{ private final int WIDTH = 25; private final int HEIGHT = 6; private final int PARTICLE_MAX = 300; private static box box; private particle[] particleList = new particle[PARTICLE_MAX]; private Random r = new Random(); private box(){ for(int i = 0; i<3;i++){ addNewParticle(); } } public int getWidth(){ return WIDTH; } public int getHeight(){ return HEIGHT; } public int getParticleMax(){ return PARTICLE_MAX; } public static box getInstance(){ if(box == null) box = new box(); return box; } public void makeParticlesMove(){ int n; for(particle particle:particleList){ if(particle != null){ n = r.nextInt(8)+1; switch(n){ case 1: if(particle.getY()-1 > 0){ particle.north(); } break; case 2: if(particle.getY()-1 > 0 && particle.getX()+1 < WIDTH-1){ particle.northeast(); } break; case 3: if(particle.getX()+1 < WIDTH-1){ particle.east(); } break; case 4: if(particle.getY()+1 < HEIGHT-1 && particle.getX()+1 < WIDTH-1){ particle.southeast(); } break; case 5: if(particle.getY()+1 < HEIGHT-1){ particle.south(); } break; case 6: if(particle.getY()+1 < HEIGHT-1 && particle.getX()-1 > 0){ particle.southwest(); } break; case 7: if(particle.getX()-1 > 0){ particle.west(); } break; case 8: if(particle.getY()-1 > 0 && particle.getX()-1 > 0){ particle.northwest(); } break; } } } collisionCheck(); } public int particleCount(){ int p = 0; for(particle particle:particleList){ if(particle !=null){ p++; } } return p; } public void showParticles(){ char[][] map = new char[WIDTH][HEIGHT]; for(particle p:particleList){ if(p != null){ int x = p.getX(); int y = p.getY(); map[x][y] = '*'; } } for(int i = 0; i < WIDTH; i++) System.out.print("-"); System.out.println(); for(int j = 1; j < HEIGHT-1; j++){ System.out.print("|"); for(int c = 1; c < WIDTH-1; c++){ if(map[c][j] == '*') System.out.print("*"); else System.out.print(" "); } System.out.println("|"); } for(int i = 0; i < WIDTH; i++) System.out.print("-"); System.out.println(); } public void collisionCheck(){ boolean[][] map = new boolean[WIDTH][HEIGHT]; for(int i =0; i<HEIGHT; i++){ for(int j = 0; j<WIDTH; j++) map[j][i] = false; } for(particle p:particleList){ if(p != null){ int x = p.getX(); int y = p.getY(); if(map[x][y]) { System.out.println("Collided!!!!"); addNewParticle(); } else map[x][y] = true; } } } public void addNewParticle(){ for(int i = 0; i < PARTICLE_MAX; i++){ if(particleList[i] == null){ particleList[i] = new particle(r.nextInt(WIDTH-2)+1, r.nextInt(HEIGHT-2)+1); break; } } } }
класс частиц:
public class Particle{ private int x; private int y; public Particle(int x, int y){ this.x = x; this.y = y; } public void setX(int x){ this.x = x; } public void setY(int y){ this.y = y; } public int getX(){ return x; } public int getY(){ return y; } public void north(){ y-=1; } public void northeast(){ y-=1; x+=1; } public void east(){ x+=1; } public void southeast(){ y+=1; x+=1; } public void south(){ y+=1; } public void southwest(){ y+=1; x-=1; } public void west(){ x-=1; } public void northwest(){ y-=1; x-=1; } }
тест:
public class Main{ public static void main(String[] args){ Box b = Box.getInstance(); do{ System.out.println("Particle count: " + b.particleCount()); b.makeParticlesMove(); b.showParticles(); try{ Thread.sleep(300); }catch (Exception e){ System.out.println(e); } }while(b.particleCount() < b.getParticleMax()); } }
Richard MacCutchan
- У меня проблема с классом enum в java. Вот три кода моей команды, но мы не знаем, как изменить переключатель на класс enum."
Какая проблема, и что вам нужно изменить?
И да, любой может скопировать этот код, если захочет, это открытый форум. Если вы не хотите, чтобы она копировалась, то публикуйте не всю программу, а только ту ее часть, которая содержит ошибку.
Member 14025358
Я хочу, чтобы рефакторинг Switch для перечисления