我有一个像这样的字符串数组:
public ModeValue mode = new ModeValue("test_mode", "dog", new String[] {
"cat", "dog", "rabbit", "horse", "bear", "fish", "bird", "snake"
}, this);
我想知道如何将每个字符串视为整数。例如:cat = 1,dog = 2,rabbit = 3等。然后我想通过使用该整数访问每个字符串。这将用在可以单击以切换模式的字符串列表中。
答案 0 :(得分:0)
字符串数组已经允许您将整数与字符串映射。要获取与整数关联的字符串,只需在整数指示的索引处查找数组(例如MyArray[myInteger]
)。要获取与字符串关联的整数,请搜索数组并查找所需字符串出现的索引。请注意不要让字符串在数组中出现多次,因为这会阻止整数和字符串之间的1..1关联。
您不必为此使用数组 - 其他可索引的数据结构(如列表和哈希表)也可以使用。
这种数据结构称为查找表,并不常见。
答案 1 :(得分:0)
假设您的String数组是这样的,并且您正在用它初始化new String[] {
"cat", "dog", "rabbit", "horse", "bear", "fish", "bird", "snake"
}
对象:
String[] animals = new String[] {"cat", "dog", "rabbit", "horse", "bear", "fish", "bird", "snake"};
System.out.print(animals[0]); //cat
public ModeValue mode = new ModeValue("test_mode", "dog", animals, this);
现在,它是匿名声明的。您必须先使用名称声明它,以使用其名称和索引访问它。
例如:
ModeValue
如果没有关于mode
的更多详细信息,我不确定如何帮助切换或如何访问get
对象中的数组。您可以在ModeValue
中实现public class ModeValue
{
private String[] animals;
public getAnimals()
{
return animals;
}
}
方法以返回数组,这样您就可以正常访问它。
如何在ModeValue类中声明get方法的示例
String[] mainAnimals = mode.getAnimals();
像你的主要方法那样得到动物:
public class CameraPreview extends SurfaceView ... {
.......
public ArrayBlockingQueue<ByteBuffer> mProcessingQueue;
public CameraPreview(){
mProcessingQueue = new ArrayBlockingQueue<ByteBuffer>(10);
HandlerThread handlerThread = new HandlerThread("Image Processing Thread");
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());
handler.post(new Runnable() {
@Override
public void run() {
new ImageProcessingThread().start();
}
});
}
public void onPreviewFrame(final byte[] data, Camera camera){
.......
if(!mProcessingQueue.offer(byteBuffer)) {
byteBuffer.clear();
Log.v("IMAGE_AVOIDED", count + "");
} else {
Log.v("IMAGE_PUSHED", count + "");
}
}
public void processImage(ByteBuffer image){
.. call to opencv jni function ..
}
public class ImageProcessingThread extends Thread{
int count = 0;
@Override
public void run() {
super.run();
while(mImageProcessingRunning){
try {
ByteBuffer image = mProcessingQueue.take();
Log.v("IMAGE_TAKEN", count++ + "");
processImage(image);
image.clear();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}