Как оптимизировать этот код, чтобы сделать его быстрее - PullRequest
0 голосов
/ 14 февраля 2020

Я действительно новый ученик старшей школы в java, и сейчас мы оптимизируем проект, но я застрял. Я думаю, что я упустил все, что я могу сделать. Ниже мои 3 класса. PS, эти коды распечатывают время, потраченное в то время как l oop, и я пытаюсь уменьшить его до менее чем 1 se c на моем компьютере. Сейчас он работает между 1.49 и 1.38.

main:

public class code {
    public static void main(String[] args) {
        int numRows = 30;
        int numCols = 30;
        int start = 31;
        int exit = 868;
        int numKittens = 30_000;
        KittenBox box = new KittenBox(numRows, numCols, start, exit, 
                  numKittens);
        double a = 10;
        box.play();
    }
}

котенок. java:

import java .util.SplittableRandom;

public class Kitten {

private int rows;
private int columns;
public int square;
private SplittableRandom a;

public Kitten(int rows, int columns, int square) {
    this.rows = rows;
    this.columns = columns;
    this.square = square;
    a = new SplittableRandom();
}

public int move() {
    int i = a.nextInt(1, 5);
    return (i == 1 && (!(this.square < columns))) ? 
            this.square -= rows : ((i == 2 && (!(this.square >= columns * 
            (rows - 1)))) ? this.square += rows : ((i == 3 && (!(this.square
            % rows == 0))) ? this.square -= 1 : ((!(this.square % rows == 
            rows - 1)) ? this.square += 1 : this.square)));
}

}

kittenbox. java:

public class KittenBox {

    private ArrayList<Kitten> kitten;
    private int numRows;
    private int numCols;
    private int start;
    private int exit;
    private int numKittens;

    public KittenBox(int numRows, int numCols, int start, int exit, int numKittens) {
        this.numRows = numRows;
        this.numCols = numCols;
        this.start = start;
        this.exit = exit;
        this.numKittens = numKittens;
        kitten = new ArrayList<>();

    }
    public void play() {
        for (int i = 0; i < numKittens; i++) {
            kitten.add(new Kitten(numRows, numCols, start));
        }
        long startTime = System.nanoTime();
        while (!kitten.isEmpty()) {
            for (int i = 0; i < kitten.size(); i++) {
                kitten.get(i).move();
                if (kitten.get(i).square == exit) {
                    kitten.remove(i);
                }
            }
        }
        long endTime = System.nanoTime();
        System.out.format("Kittens took %f seconds to escape.\n",
                (endTime - startTime) / 1000000000.0);
    }
}

, но я все еще не могу ускорить мой код до эталонного уровня. Есть ли способ быстрее?

спасибо большое.

Ответы [ 3 ]

0 голосов
/ 14 февраля 2020

Не уверен, насколько это быстро, но вы можете попробовать это

int randomNumber = (int)(Math.random() * range_size + starting_num);
int one_to_four = (int)(Math.random() * 4 + 1);
0 голосов
/ 21 февраля 2020

Скорее всего, ваша проблема в том, что этот ужасный беспорядок в вызываемой вами функции move() не совсем работает так, как вы думаете, он работает, и поэтому он заставляет котят достигать «выхода» гораздо реже, чем вы думаете, они бы.

Если сформулировать этот вопрос, этого должно быть достаточно, чтобы помочь вам встать на пути. (Кроме того, это, кажется, домашняя работа, и для домашней работы мы склонны указывать на решения, не предоставляя фактических решений.)

Прежде чем кто-либо сможет помочь вам с для этого вам придется переписать этот move() метод, чтобы сделать его понятным для людей.

  • Подсказка 1: используйте оператор switch().

  • Подсказка 2: добавьте причину default: к вашему утверждению switch, которое, если оно достигнуто, вызывает исключение. Таким образом, вы будете знать, что вы не генерируете числа, которые никогда не обрабатываются.

0 голосов
/ 14 февраля 2020

Вы можете выбрать:

Math.random () // он имеет надежную эффективность .

Вы можете обратиться к следующей программе:

        int max = 5; 
        int min = 1; 
        int range = max - min + 1; 

        // generate random numbers within 1 to 10 
        for (int i = 0; i < max; i++) { 
            int rand = (int)(Math.random() * range) + min; 

            // Output is different everytime this code is executed 
            System.out.println(rand); 
        } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...