Java 如何优化此代码以使其更快

Java 如何优化此代码以使其更快,java,performance,optimization,cpu-speed,Java,Performance,Optimization,Cpu Speed,我是一个非常新的java noobie高中生,我们目前正在优化一个项目,但我现在被卡住了。我想我已经记下了我能做的一切。 下面是我的三节课。 顺便说一句,这些代码打印出了while循环中花费的时间,我正试图在我的计算机上把它减少到不到1秒。目前它运行在1.49和1.38之间 主要内容: kitten.java: 导入java.util.SplittableRandom public class Kitten { private int rows; private int columns; pu

我是一个非常新的java noobie高中生,我们目前正在优化一个项目,但我现在被卡住了。我想我已经记下了我能做的一切。 下面是我的三节课。 顺便说一句,这些代码打印出了while循环中花费的时间,我正试图在我的计算机上把它减少到不到1秒。目前它运行在1.49和1.38之间

主要内容:

kitten.java:

导入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)));
}
公共类小猫{
私有int行;
私有int列;
公共综合广场;
私有可拆分随机表a;
公猫(整数行、整数列、整数正方形){
this.rows=行;
this.columns=列;
这个正方形=正方形;
a=新的SplittableRandom();
}
公共int移动(){
int i=a.nextInt(1,5);
返回(i==1&&(!(this.square=列)*
(行-1))?this.square+=行:((i==3&&&(!(this.square
%行==0))?this.square-=1:(!(this.square%行==
行-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);
    }
}
公共类KittenBox{
私人ArrayList小猫;
私人int numRows;
私有整数;
私人int启动;
私人出口;
国际纽基滕私人酒店;
公用KittenBox(int numRows、int numCols、int start、int exit、int numKittens){
this.numRows=numRows;
this.numCols=numCols;
this.start=start;
this.exit=退出;
this.numKittens=numKittens;
kitten=newarraylist();
}
公共游戏{
对于(int i=0;i
但我仍然无法将代码加速到基准。有没有更快的办法

非常感谢。

您可以选择:

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); 
        } 
int max=5;
int min=1;
整数范围=最大-最小+1;
//生成1到10之间的随机数
对于(int i=0;i
不确定这有多快,但您可以试试这个

int randomNumber = (int)(Math.random() * range_size + starting_num);
int one_to_four = (int)(Math.random() * 4 + 1);

您的问题很可能是,您调用的函数
move()
非常糟糕,它的工作方式与您认为的不一样,因此它导致小猫到达“出口”的频率比您认为的要低得多

这个问题的措辞应该足以帮助你上路。(此外,这似乎是家庭作业,对于家庭作业,我们倾向于指出解决方案,而不提供实际的解决方案。)

在任何人能够帮助您之前,您必须重写
move()
方法,使其能够被人类理解

  • 提示1:使用
    switch()
    语句

  • 提示2:在
    开关
    语句中添加一个
    默认值:
    原因,如果达到该值,将引发异常。这样,您将知道您不会生成从未处理过的数字


您确定您的代码中没有其他东西会减慢速度吗?像这样的库方法通常会得到很好的优化。可能是因为您关注错误的行而提供了更多代码。您是否分析了您的应用程序以找到瓶颈,或者您只是猜测这一行导致您的应用程序错过了基准测试(哪一行?)?
int randomNumber = (int)(Math.random() * range_size + starting_num);
int one_to_four = (int)(Math.random() * 4 + 1);