Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 如何正确计算分配的内存_Java_Rounding - Fatal编程技术网

Java 如何正确计算分配的内存

Java 如何正确计算分配的内存,java,rounding,Java,Rounding,我的任务是: 假设除了比例因子之外,还有一个因子负责在从列表中删除元素后释放不必要的内存。您将得到两个因素:一个用于增加分配的内存,另一个用于减少分配的内存。接下来是对元素集群的抽象添加和删除的查询。 您的任务是返回此时每个“count”查询的分配内存 分数的乘法向上舍入,分数的除法向下舍入 最初分配的内存是2 输入:在第一行中有许多查询和缩放(≥1.1)和缩小规模(≥1.1)因素 以下是这些类型的查询:添加计数;删除计数;伯爵 输出:对于每个“计数”查询,记下此时分配的内存量 输入1: 32.

我的任务是:

假设除了比例因子之外,还有一个因子负责在从列表中删除元素后释放不必要的内存。您将得到两个因素:一个用于增加分配的内存,另一个用于减少分配的内存。接下来是对元素集群的抽象添加和删除的查询。 您的任务是返回此时每个“count”查询的分配内存

分数的乘法向上舍入,分数的除法向下舍入

最初分配的内存是2

输入:在第一行中有许多查询和缩放(≥1.1)和缩小规模(≥1.1)因素

以下是这些类型的查询:添加计数;删除计数;伯爵

输出:对于每个“计数”查询,记下此时分配的内存量

输入1:

32.02.0

加100

删除50

计数

输出1:

六十四

输入2:

12.1.1.1

加10000

删除500

计数

加255342

删除255

计数

加243

删除2435

计数

加666554

删除346

计数

不幸的是,我不知道test2的输出应该是什么。 我的代码在test1中正常工作,但在test2中失败。 有人能帮我吗?也许四舍五入有问题,也许不是

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int queryNumber = scanner.nextInt();
        double upScalingFactor = scanner.nextDouble();
        double downScalingFactor = scanner.nextDouble();

        int allocatedMemory = 2;
        int numOfElementsToStore = 0;

        for (int i = 0; i < queryNumber; i++) {
            String operationType = scanner.next();

            switch (operationType) {
                case "add":
                    int amountToAdd = scanner.nextInt();
                    numOfElementsToStore += amountToAdd;

                    while (allocatedMemory <= numOfElementsToStore) {
                        allocatedMemory = (int) Math.ceil(allocatedMemory * upScalingFactor);
                    }
                    break;
                case "delete":
                    int amountToSubtract = scanner.nextInt();
                    numOfElementsToStore -= amountToSubtract;

                    while (Math.floor(allocatedMemory / downScalingFactor) >= numOfElementsToStore) {
                        allocatedMemory = (int) Math.floor(allocatedMemory / downScalingFactor);
                    }
                    break;
                case "count":
                    System.out.println(allocatedMemory);
                    break;
            }
        }
    }
}
公共类主{
公共静态void main(字符串[]args){
扫描仪=新的扫描仪(System.in);
int queryNumber=scanner.nextInt();
双放大因子=scanner.nextDouble();
双降尺度因子=scanner.nextDouble();
int allocatedMemory=2;
int numOfElementsToStore=0;
for(int i=0;i
您不应该在while循环中对结果进行乘除运算。并始终使用
Math.floor()

输入2更正输出

9660
271469
271469
937184