可能重复:
Java是"传递引用"吗?
数组在Java 中不是原始类型,但它们也不是对象,它们是通过值还是通过引用传递的?它取决于数组包含的内容,例如引用或基本类型吗?
我想创建一个名为"Node"的空基类,然后从其中派生出其他类,如"DecisionNode"和"Leaf".这样做是有意义的,这样我就可以利用多态将这些不同类型的节点传递给方法,而不必在编译时知道将传递给方法的内容,但每个派生类不共享任何状态或方法.
我认为实现这个的最好方法是,不在基类中创建额外的纯虚方法,这会增加混乱,这将使构造函数变为纯虚拟.在该类的头文件中,"Node.h"因此我写道:
class Node {
private:
virtual Node();
};
Run Code Online (Sandbox Code Playgroud)
在"Node.cpp"我写道:
#include "Node.h"
virtual Node::Node() = 0;
Run Code Online (Sandbox Code Playgroud)
此实现防止Node被另一个类实例化,因为唯一的构造函数是private,并使用纯虚拟说明符来指示该类是抽象的.但是,这会给编译器错误:
Node.h:6:21: error: return type specification for constructor invalid
Node.h:6:21: error: constructors cannot be declared virtual [-fpermissive]
Run Code Online (Sandbox Code Playgroud)
我的问题是:有一个简洁的方法来创建一个空的抽象基类?
我正在尝试继承,出于教育目的,我想检查为各种对象和对象中的字段分配的地址.有没有一个工具可以让我看到JVM正在使用的内存以及使用它的内容.
例如,如果我有两个类:
class A { int i,j; int f { ...} }
class B extends A { int c; /* more methods, overriding f and declaring new ones as well */ }
Run Code Online (Sandbox Code Playgroud)
并在对象a和实例中实例化这些类b.
是否有一个工具可用于分析内存使用情况并确切地查看为这些内存分配的内存?
谢谢!
我有一个看起来像这样的脚本:
while true; do
read -t10 -d$'\n' input_from_serial_device </dev/ttyS0
# do some costly processing on the string
done
Run Code Online (Sandbox Code Playgroud)
问题是它将错过串行设备的下一个输入,因为它正在燃烧CPU周期进行昂贵的字符串处理.
我认为我可以通过使用管道解决这个问题,原因是bash将缓冲两个进程之间的输入:
( while true; do
read -d$'\n' input_from_serial_device </dev/ttyS0
echo $input_from_serial_device
done ) | ( while true; do
read -t10 input_from_first_process
# costly string processing
done )
Run Code Online (Sandbox Code Playgroud)
我首先要检查我是否正确理解了管道,这确实会缓冲我预期的两个进程之间的输入.这个想法是否正确?
其次,如果我在第二个进程中找到了我正在寻找的输入,是否有办法立即终止两个进程,而不是退出第二个进程并在退出第一个进程之前等待下一个输入?
最后,我意识到bash不是最好的方法,我现在正在研究一个C程序,但我非常希望将其作为一个中间解决方案.
谢谢!
可能重复:
在Java中突破嵌套循环
我如何使用break和/或continue语句返回到第1,2和3点的while循环的第一行,例如,如伪代码所示?
假设我有一个让人联想到以下内容的场景:
while(condition) {
// want to return to this point
for (Integer x : xs) {
// point 1
for (Integer y : ys) {
// point 2
...
}
...
}
for (Integer a : as) {
for (Integer b : bs) {
// point 3
...
}
...
}
}
Run Code Online (Sandbox Code Playgroud) 我已经定义了一个目标lowerpartition/3如下:
lowerpartition(X,P,Z) :- var(Z),!,lowerpartition(X,P,[]).
lowerpartition([],_,_).
lowerpartition([X|Xs],P,Z) :- X=<P, lowerpartition(Xs,P,[X|Z]).
lowerpartition([X|Xs],P,Z) :- X>P, lowerpartition(Xs,P,Z).
Run Code Online (Sandbox Code Playgroud)
我打电话的时候
lowerpartition([1,2,3,4,5],3,X).
Run Code Online (Sandbox Code Playgroud)
我希望X绑定到列表[3,2,1],但Prolog只返回false.我做错了什么?
是否可以基于字节索引Java数组?
即类似的东西
array[byte b] = x;
Run Code Online (Sandbox Code Playgroud)
我有一个性能非常关键的应用程序,它从文件中读取b(在上面的代码中),我不希望将此转换为int的开销.实现这一目标的最佳方法是什么?使用这种索引方法而不是int会导致性能下降吗?
非常感谢,
Froskoy.
考虑以下代码(其中byteIndex是一个int):
int bitNumber = b-(8*byteIndex);
bitMask = 0x8>>(byte)bitNumber;
Run Code Online (Sandbox Code Playgroud)
这会产生错误
error: possible loss of precision
Run Code Online (Sandbox Code Playgroud)
编译时(必需字节,找到int).
代码
int bitNumber = b-(8*byteIndex);
bitMask = 0x8>>2;
Run Code Online (Sandbox Code Playgroud)
编译好.
这里有什么问题,如何修复第一个允许按int值移位的例子?
编辑:在评论之后,这是一个更完整的例子:
48) int byteIndex;
49) byte bitMask;
50) int bitNumber;
// assign value to byteIndex
67) bitNumber = b-(8*byteIndex);
68) bitMask = 0x8>>bitNumber;
Run Code Online (Sandbox Code Playgroud)
并且给出的错误是:
...MyClass.java:68: error: possible loss of precision
bitMask = 0x8>>bitNumber;
^
required: byte
found: int
1 error
Run Code Online (Sandbox Code Playgroud) java ×5
arrays ×2
byte ×2
bash ×1
bit-shift ×1
break ×1
c++ ×1
constructor ×1
for-loop ×1
inheritance ×1
int ×1
list ×1
loops ×1
polymorphism ×1
prolog ×1
serial-port ×1
while-loop ×1