Java 在数组中有一个对象的char引用
是否可以将字符点指向数组中的对象?我试图让字符:+,-,*,/指向数组中的索引 我很清楚我下面的部分语法不正确。这只是我描述我希望完成的事情的方式Java 在数组中有一个对象的char引用,java,arrays,parsing,char,Java,Arrays,Parsing,Char,是否可以将字符点指向数组中的对象?我试图让字符:+,-,*,/指向数组中的索引 我很清楚我下面的部分语法不正确。这只是我描述我希望完成的事情的方式 public static void main(String[] args) { Operations plus; Operations minus; Operations multiply; Operations divide; /*****
public static void main(String[] args) {
Operations plus;
Operations minus;
Operations multiply;
Operations divide;
/**********Create jumpTable*******************/
Operations[] jumpTable = new Operations[255];
/**********Add Object to jumpTable************/
jumpTable[0] = new Addition();
jumpTable[1] = new Subtraction();
jumpTable[2] = new Multiplication();
jumpTable[3] = new Division();
/**********Point to index in table************/
plus = jumpTable[0];
minus = jumpTable[1];
multiply = jumpTable[2];
divide = jumpTable[3];
//this is what im trying to do:
//***************************************
char +;
char -;
'+' = plus
'-' = minus and etc...
//****************************************
double x = Double.parseDouble(args[0]);
double y = Double.parseDouble(args[1]);
System.out.printf("%f %s %f = %f%n", x, op, y, op.Compute(x, y));
}
}
没有
char是表示单个16位unicode字符的Java基本类型
请看这里:
您可以将字符强制转换为int或byte
char addition = '+';
operators[(byte)addition] = ...
您是否可以使用映射
而不是操作[]
此外,操作也可能被称为操作
是否可以将字符点指向数组中的对象
假设您在问:“是否可以使用char
作为数组的索引”,那么答案是“是的,这是可能的”
数组的索引表达式可以具有任何可以提升为
int
的类型;看见并且char
类型可以升级为int
。(你甚至不需要包含一个类型转换来实现它。它只是工作而已。)你可以在每一个允许类型int
的地方使用一个类型的值,并且(除了字符串连接和两种类型都有两种方法)它的工作原理与通过转换获得的int相同
因此,运算符['+']
与运算符[43]
相同,并且类似
如果您只需要*
,+
,-
,/
,则可以使用长度为6的数组,并通过将差值取为*
(这是其中的第一个)对其进行索引:
当然,您可以根据需要将表格设置得尽可能大,并直接索引。不需要类型转换。看看我的答案。-1-这是不正确的。(这就是char
的含义,但这并不意味着答案是“否”。)我误读为指向整个数组对象,而不仅仅是索引。这么晚才回答!对不起@Paulo非常感谢,我很难理解“char操作符=…;”代表什么。这只是一个使用示例。。。例如,您可以通过读取输入或诸如此类的内容来获取char。我只是假设你在某个地方已经有了正确的字符,并希望得到正确的操作。对,我希望用户输入字符,它将得到正确的计算方法。那么,你的问题是如何让用户输入字符?也许最好把这当作一个新问题来问,因为它取决于很多因素。如果您希望像示例中那样将此char作为命令行参数,那么应该查看String.charAt()
method.performance不是问题,我将对此进行研究。谢谢guys@Java如果性能不是一个问题,为什么不呢?实际上,它们在性能方面大致相同。在我的机器上,运行数组查找版本每次查找大约需要22纳秒,而映射版本每次查找大约需要30纳秒。要使差异有意义还需要很长时间。这意味着500000000个数组查找大约需要10秒,而映射版本大约需要15秒。Stephen,因此基本上将有2个数组(jumptable和字符数组)。我理解正确吗?我不太理解你的问题,但我认为答案是否定的。这是家庭作业吗?哈哈,没有学校离我太远了,我正在读一本关于设计模式的书,对我来说,最好的理解方式就是通过实际练习算法,这就是我试图弄清楚每种策略是如何实现和使用的why@Java豆子-我想我明白你现在在说什么了。答案肯定是否定的。你只需要一个数组:你所说的“jumpTable”。。。虽然这是一个用词不当,因为这里没有“跳跃”。然后,在jumpTable['+']
处安排数组填充(例如)一个加法
实例。(我并不是说额外的编码涉及到一个值得的……只是这是实现这一点的一种方式。)顺便说一下,对于这种类型,单数名操作
可能比复数操作
更合适。
Operations[] jumptable = {
new Multiplication(), // * = 42 = '*' + 0
new Addition(), // + = 43 = '*' + 1
null, // , = 44
new Subtraction(), // - = 45 = '*' + 3
null, // . = 46
new Division() // / = 47 = '*' + 5
};
char operator = ...;
Operation op = jumptable[operator - '*'];