Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我得到0?_Java_Android_Math - Fatal编程技术网

Java 为什么我得到0?

Java 为什么我得到0?,java,android,math,Java,Android,Math,我用下面的等式一直得到0,我确信这是我遗漏的东西,但这在过去几天一直困扰着我 int BASE_SIZE = 8; Point screenSize = new Point(1440,2000); mMaxSize = mScreenSize.x/BASE_SIZE; // This line is the line causing issue. int surfaceViewSize = mMaxSize * ((BASE_SIZE-1)/BASE_SIZE); 这与我是否将变量设为整数

我用下面的等式一直得到0,我确信这是我遗漏的东西,但这在过去几天一直困扰着我

int BASE_SIZE = 8;
Point screenSize = new Point(1440,2000);

mMaxSize = mScreenSize.x/BASE_SIZE;

// This line is the line causing issue.
int surfaceViewSize = mMaxSize * ((BASE_SIZE-1)/BASE_SIZE);

这与我是否将变量设为整数无关,如果我使用Math.round,我将其设为double,任何东西。我一辈子都搞不懂这一点。

这里的整数除法:

(BASE_SIZE-1)/BASE_SIZE
结果是

int surfaceViewSize = mMaxSize * 0;
您需要将其中一个操作数强制转换为双精度或浮点型

将您的操作替换为:

mMaxSize = 1.0*mScreenSize.x/BASE_SIZE;
int surfaceViewSize = mMaxSize * ((1.0*BASE_SIZE-1)/BASE_SIZE);

试试看,这只是一个大括号问题

有一种方法可以让你得到屏幕大小,方法是BASE_size-1/BASE_size为零,因为Java使用整数除法。也许你指的是mMaxSize*BASE_SIZE-1/BASE_SIZE;是的,我使用这种方法来获得屏幕大小,我只是不想输入,因为这不是在活动中。这里的目标是得到mMaxScreenSize.x*7/8。因此,MMAXCreensize.x*8-1/8请根据更改标题。无论是谁标记了此,谢谢!我知道这是整数除法的问题,但不知道如何解决。向替身施放修正了问题。不,不是。公平地说,更改大括号将改变整数除法的执行方式,但最终Xentros是正确的:基本问题是整数除法。实际上根本不需要外圆括号。但是,这是最好的答案。无论如何,当您要将结果赋回int时,将所有内容都转换为float或double是没有意义的。您只需对操作顺序保持明智。您需要将其中一个操作数强制转换为double或float,然后在不强制转换任何内容的情况下继续操作,而不是乘以双精度数字1,并且由于缺少强制转换,代码甚至无法编译。
int surfaceViewSize = (mMaxSize * (BASE_SIZE-1))/BASE_SIZE;