Java 如何优化此代码以使其更快
我是一个非常新的java noobie高中生,我们目前正在优化一个项目,但我现在被卡住了。我想我已经记下了我能做的一切。 下面是我的三节课。 顺便说一句,这些代码打印出了while循环中花费的时间,我正试图在我的计算机上把它减少到不到1秒。目前它运行在1.49和1.38之间 主要内容: kitten.java: 导入java.util.SplittableRandomJava 如何优化此代码以使其更快,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
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);