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