Java 为什么我会得到a/by零错误?
我试着做一个基本的计时循环,但我一直在做Java 为什么我会得到a/by零错误?,java,exception,timing,Java,Exception,Timing,我试着做一个基本的计时循环,但我一直在做 java.lang.ArithmaticException / by zero error at Timer.advanceTime(Timer.java:24) at Game.run(Game.java:79) at java.lang.Thread.run(Thread.java:722) 这是我的密码: public class Timer { private static final long NS_PER_SECON
java.lang.ArithmaticException / by zero error
at Timer.advanceTime(Timer.java:24)
at Game.run(Game.java:79)
at java.lang.Thread.run(Thread.java:722)
这是我的密码:
public class Timer {
private static final long NS_PER_SECOND = 1000000000L;
private static final long MAX_NS_PER_UPDATE = 1000000000L;
private static final int MAX_TICKS_PER_UPDATE = 100;
private float ticksPerSecond;
private long lastTime;
public int ticks;
public float a;
public float timeScale = 1.0F;
public float fps = 0.0F;
public float passedTime = 0.0F;
public Timer(float ticksPerSecond) {
this.ticksPerSecond = ticksPerSecond;
this.lastTime = System.nanoTime();
}
public void advanceTime() {
long now = System.nanoTime();
long passedNs = now - this.lastTime;
this.lastTime = now;
if (passedNs < 0L) passedNs = 0L;
if (passedNs > 1000000000L) passedNs = 1000000000L;
this.fps = (float)(1000000000L / passedNs);
this.passedTime += (float)passedNs * this.timeScale * this.ticksPerSecond / 1.0E+009F;
this.ticks = (int)this.passedTime;
if (this.ticks > 100) this.ticks = 100;
this.passedTime -= this.ticks;
this.a = this.passedTime;
}
}
公共类计时器{
专用静态最终长纳秒=100000000升;
每更新一次的专用静态最终长最大长度=1000000000L;
私有静态最终整数最大刻度每更新=100;
私人浮点数秒;
私人长时间;
公共卫生;
公开募股;
公共浮动时间刻度=1.0F;
公共浮动fps=0.0F;
公共浮点数通过时间=0.0F;
公共计时器(浮点滴答秒){
this.ticksPerSecond=ticksPerSecond;
this.lastTime=System.nanoTime();
}
public void advanceTime(){
long now=System.nanoTime();
long passedNs=now-this.lastTime;
this.lastTime=现在;
如果(通过数<0L)通过数=0L;
如果(通过数>100000000升)通过数=100000000升;
this.fps=(浮动)(1000000000L/passedNs);
this.passedTime+=(float)passedNs*this.timeScale*this.ticksPerSecond/1.0E+009F;
this.ticks=(int)this.passedTime;
如果(this.ticks>100)this.ticks=100;
this.passedTime-=this.ticks;
this.a=this.passedTime;
}
}
来自系统的Javadoc.nanoTime
该方法提供纳秒精度,但不一定
纳秒分辨率(即值变化的频率)-否
作出保证,但决议至少与
currentTimeMillis()
因此,您对
System.nanoTime()
进行的两个连续调用可能具有相同的返回值-这就是为什么除以它们之间的差异会产生异常。可能这就是原因
if (passedNs < 0L) passedNs = 0L; // if so passedNs becomes Zero
if (passedNs > 1000000000L) passedNs = 1000000000L;
this.fps = (float)(1000000000L / passedNs); // if passedNs is zero the error will occur
或
因为你要除以零。没有任何其他原因会导致错误消息。-1-您应该在问题中包含相关代码。请看,您是否知道错误实际上是
算术异常
,并且/by zero error
表示您要除以的值是0
?转到您的Game.java
文件的第79行,了解发生了什么。@DavidWallace您可以将其作为答案发布。但现在你要让我把他的密码移到问题中去。@Robert谢谢。都做完了。
if(passedNs != 0L){
this.fps = (float)(1000000000L / passedNs);
}
try{
this.fps = (float)(1000000000L / passedNs);
}catch(Exception e){
//handle the exception
}