首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java教程.isEmpty()方法

Java教程.isEmpty()方法
EN

Stack Overflow用户
提问于 2014-01-22 08:51:27
回答 2查看 426关注 0票数 0

我有3个类(打印机、PaperTray和机器)和我的主要Java类(HelloWorld)。

我期待看到“载入更多的纸张!”当这个"myPrinter.print(2)“被调用时,输出显示”我的打印机打开了!“两次,好像托盘里有纸。如果有足够多的纸张被传递到loadPaper中(在加载文件开始工作之前,该文件暂时已被注释掉),我应该只看到显示打印机两次的输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import printing.Printer;

public class HelloWorld {

public static void main(String[] args) 
{
    Printer myPrinter = new Printer(true, "MY PRINTER");
    //myPrinter.loadPaper(3);
    myPrinter.print(2);
}
}

我的打印机班:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package printing;

public class Printer extends Machine
{
    private String modelNumber;
    private PaperTray paperTray = new PaperTray(); //printer now HAS paper tray

public Printer(boolean isOn, String modelNumber)
{
    super(isOn); //calls the constructor of the machine class - Super calls inherited parent
    this.modelNumber = modelNumber;
}

public void print(int copies) 
{
    String onStatus = "";
    if(isOn)
    {
        onStatus = " is On!";
    }
    else
    {
        onStatus = " is Off!";
    }

    String textToPrint = modelNumber + onStatus;

    while(copies > 0 && !paperTray.isEmpty())
    {
        System.out.println(textToPrint);
        copies--;
        paperTray.usePage();
    }

    if(paperTray.isEmpty())
    {
        System.out.println("Load more paper!");
    }   
}

//for each 
public void printColours()
{
    String[] colours = new String[] {"Red", "Blue", "Green", "Yellow" };

    //for current colour "in" colours
    for(String currentColour : colours)
    {
        if("Green".equals(currentColour))
        {
            continue;
        }
        System.out.println(currentColour);
    }
}

public void print(String text) 
{
    System.out.println(text);
}

public String getModelNumber()
{
    return modelNumber;
}

public void loadPaper(int count) 
{
    paperTray.addPaper(count);
}

}

当调用".isEmpty()“时,页面的值是-2,但我认为".isEmpty()”只在值等于0时才有效?所以我猜这就是我的问题所在。然而,我所拥有的代码(99%肯定)与导师示例相同。

PaperTray类是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class PaperTray {

int pages = 0;

public void addPaper(int count) 
{
    pages += count;
}

public void usePage()
{
    pages--;
}

public boolean isEmpty()
{
    return pages > 0;
}
}

机器类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Machine {

protected boolean isOn;

public Machine(boolean isOn)
{
    this.isOn = isOn;
}

public void TurnOn()
{
    isOn = true;
}

public void TurnOff()
{
    isOn = false;
}

}

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-22 08:55:20

isEmpty()方法在PaperTray中是错误的,它现在返回true if pages > 0 (当它已满时),并返回false if pages <= 0 (当它是空的)。

您需要将条件切换为pages == 0或绝对确定为pages <= 0

票数 2
EN

Stack Overflow用户

发布于 2014-01-22 08:55:02

您的isEmpty()定义似乎是错误的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean isEmpty()
{
    return pages > 0; //shouldn't it be pages <=0 ?
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21289019

复制
相关文章
数组大小分配(动态内存分配)
在很多情况下,我们无法确定要使用多大的数组。一般申请大于估计数目的固定大小,这样程序在运行时就申请了固定的大小,你觉得数组定义足够大,但是如果某种原因,数组的个数增大或减小,你又必须重新修改程序,扩大数组的存储范围。这种分配固定大小内存分配的方法称为静态内存分配。但是这种分配方法存在比较严重的缺陷,特别是处理某些问题时,在大多数情况下会浪费大量的内存空间;在少数情况下,当申请的数组不够大时,可能引起下标越界错误,甚至导致严重的后果。 为了解决这个问题,提出了动态内存分配。所谓动态内存分配是指在程序执行的过程中动态地分配或者回收存储空间的内存分配方法。动态分配不像数组等静态内存分配方法需要预先申请内存空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。从以上动、静态内存分配比较可以知道动态内存分配相对于静态内存分配的特点:
海盗船长
2020/08/27
2.6K0
C++ VS2012 内存泄露检测
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120466.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/15
7150
VS2012使用条件断点和内存断点
如果对a打下断点,那么每次循环的时候都会触发一次断点。此时我们可以为断点设置触发它的条件,使它满足指定条件时才触发。
恋喵大鲤鱼
2018/08/03
1.2K0
VS2012使用条件断点和内存断点
C++|内存管理|数组内存分配机制
这两者有什么不同呢?显然,对a进行sizeof,大小应该是100,而b则是8,也就是说,数组显然存在着某种额外的信息,告诉着你数组的大小。
朝闻君
2021/11/22
7440
【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )
在 栈内存 中 , 声明 不指定大小的 字符数组 , 初始化 “123” 字符串 ;
韩曙亮
2023/03/29
2.4K0
【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )
Java基础(四)| 数组及内存分配详解
​ 这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
timerring
2022/10/28
4300
Java基础(四)| 数组及内存分配详解
String、数组和集合的内存占用大小
之前的文章中,我们使用JOL工具简单的分析过String,数组和集合类的内存占用情况,这里再做一次更详细的分析和介绍,希望大家后面再遇到OOM问题的时候不再抱头痛哭,而是可以有章可循,开始吧。
程序员小猿
2021/01/19
1K0
String、数组和集合的内存占用大小
Linux 查看CPU核心数、内存大小和硬盘分配
1、Linux 查看CPU核心数 cat /proc/cpuinfo | grep "model name" && cat /proc/cpuinfo | grep "physical id" 2、 
静谧星空TEL
2021/04/27
10.3K0
Linux 查看CPU核心数、内存大小和硬盘分配
高端内存映射之vmalloc分配内存中不连续的页--Linux内存管理(十九)
根据上文的讲述, 我们知道物理上连续的映射对内核是最好的, 但并不总能成功地使用. 在分配一大块内存时, 可能竭尽全力也无法找到连续的内存块.
233333
2019/01/03
3K0
vs2012密钥_ultimate2012产品密钥
Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥:YKCW6-BPFPF-BT8C9-7DCTH-QXGWC;KCW6-BPFPF-BT8C9-7DCTH-QXGWC
全栈程序员站长
2022/11/04
3.2K0
PHP数组实际占用内存大小的分析
http://blog.csdn.net/hguisu/article/details/7376705
Java架构师必看
2021/03/22
1.1K0
PHP数组实际占用内存大小的分析
我们在前面的php高效写法提到,尽量不要复制变量,特别是数组。一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。下面我们可以粗略的估算PHP数组占用内存的大小,首先我们测试1000个元素的整数占用的内存:
黄规速
2022/04/14
1.4K0
PHP数组实际占用内存大小的分析
vs2012ultimate密钥_visual studio 2012产品密钥
Visual Studio Express 2012 for Windows Desktop
全栈程序员站长
2022/11/04
1.8K0
Netty内存分配
Netty 中的内存管理的实现并不是一蹴而就的,它也是参考了 Jemalloc 内存分配器。而 Jemalloc 又借鉴了 Tcmalloc(出身于 Google,通过红黑树来管理内存快和分页,带有线程缓存。对于小的对象来说,直接由线程的局部缓存来完成,大对象那就由自旋锁来减少多线程下的竞争)的设计思路,但是 Jemalloc 设计的更复杂,虽然也有线程缓存的特性,但是 Jemalloc 将内存分配的粒度划分为 Small、Large、Huge 三个分类,在空间的占用上比较多,但是在大内存分配的场景,内存碎片就略少 。
政采云前端团队
2023/09/14
5360
Netty内存分配
Zephyr 内存分配
int k_mem_pool_alloc(struct k_mem_pool *p, struct k_mem_block *block, size_t size, s32_t timeout)
无限之生
2020/07/01
1.7K0
java内存分配
转自:http://www.iteye.com/topic/634530 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(对象可能在常量池里)(字符串常量对象存放在常量池中。) 3. 堆:存放所有new出来的对象。 4. 静态域:存放静态成员(static定义的) 5. 常量池:存放字符串常量和基本类型常量(public static final)。有时,在嵌入式系统中,常量本身会和其他部分分割离开(由于版权等其他原因),所以在这种情况下,可以选择将其放在ROM中 。 6. 非RAM存储:硬盘等永久存储空间 这里我们主要关心栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。 对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。 如以下代码:
qubianzhong
2019/06/26
2.1K0
java内存分配
连续内存分配
连续内存是一种比较直观的做法。这种做法将内存分为两个区域,一个是用户进程区域,另一个是操作系统区域。操作系统一般放在内存的低地址区域,这时因为中断向量被设置在低地址,例如0x80中断。为了提高响应速度,内存之中需要驻留多个进程来实现这一性能改进。现在就需要考虑内存分配。
zy010101
2019/07/10
1.8K0
libpng+VS2012(VS2015)的使用
 OpenCV保存PNG图像底层调用的就是libpng库,简要说一下libPNG库的单独使用。 1.首先需要下载两个库,一个是libpng,一个是zlib libpng库下载地址:http://www
一棹烟波
2018/01/12
2K0
libpng+VS2012(VS2015)的使用
【C++】动态内存管理 ⑤ ( 基础数据类型数组 内存分析 | 类对象 内存分析 | malloc 分配内存 delete 释放 | new 分配内存 free 释放内存 )
使用 malloc 函数 , 为 基础数据类型数组 分配内存 , 是可以使用 delete 操作符 释放该内存的 ;
韩曙亮
2023/10/15
2520
【C++】动态内存管理 ⑤ ( 基础数据类型数组 内存分析 | 类对象 内存分析 | malloc 分配内存 delete 释放 | new 分配内存 free 释放内存 )
C语言动态内存分配:按需分配内存。
1.void *malloc(int size); 2.void free(void *p); 例:建立动态数组,输入5个学生的成绩,输出不及格学生的成绩。 #include<stdlib.h> int main(){ void check(float *p); float *p=(float*)malloc(5*sizeof(float)); for(int i=0;i<=4;i++){ scanf("%f",p+i); } check(p); free(p); return 0; } void chec
岳泽以
2022/10/26
1.5K0

相似问题

分配受控内存数组大小(字节)

12

内存分配与数组大小定义

12

内存分配和字符数组

36

字符指针数组内存分配

12

不能为field分配内存吗?

20
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文