import java.util.Scanner;
public class EnemyMessage {
public static void main(String[] args) {
System.out.println("enter the code:");
Scanner keyboard = new Scanner(System.in);
int key;
int i;
String code = keyboard.next();
for (key = 1; key <= 100; key++) {
for (i = 0; i < code.length(); i--) {
char c = code.charAt(i);
int n = (int) c;
System.out.println(n);
{
(char) c = (int) c - 32 + key + 127;
System.out.println(c);
}
}
}
}
}
这段代码给了我两个对我来说没什么意义的错误。据我所知,我之前没做过任何不同的事情。
错误:
答案 0 :(得分:2)
import java.util.Scanner;
public class EnemyMessage
{
public static void main (String[] args)
{
System.out.println("enter the code:");
Scanner keyboard = new Scanner (System.in);
int key;
int i;
String code = keyboard.next();
for (key = 1; key<=100; key++)
{
for ( i = 0; i < code.length(); i--)
{
char c = code.charAt(i);
int n = (int)c;
System.out.println(n);
{
c = (char)(c - 32 + key + 127);
System.out.println(c);
}
}
}
}
}
2)“{”被驱逐意味着你错过了一个{
1)错误的构造函数是由于你没有{
而引起的答案 1 :(得分:0)
有趣的是,我没有看到任何代码错误(或者当我使用IntelliJ格式化时没有看到),除了这一行:
(char) c = (int) c - 32 + key + 127;
您正在将要存储的内容投放到char
到int
。那是行不通的。
修复你的演员表以包括你想要演员的整个范围。由于char
是c
,所以<{1}}的强制转换是多余的。
char
答案 2 :(得分:0)
问题是由此引起的:
{
(char) c = (int) c - 32 + key + 127;
System.out.println(c);
}
(char) c = ...;
语法完全无效。
作业应该看起来像c = ...;
。
如果您希望/需要在分配之前进行类型转换,则类型转换属于赋值运算符的右侧;即c = (char)(...)
。
无论如何,你所写的内容会导致Java解析器(在你的IDE中)彻底混淆......并且引人注目误认为错误是企图声明构造函数,它是错误的上下文
不幸的是,这有时会发生......尽管它依赖于编译器。编译器试图提供帮助,但编译器/编译器编写者“猜错了”你当时想要写的内容。
然后,似乎编译器的语法恢复已在其符号流中插入{
符号以尝试修复问题。第二个错误提示没有}
与其插入的幻像{
相匹配。再次,它猜错了。
但其根本原因是您的原始语法错误。
对于记录,原始表达式中的int
强制转换不是必需的。你可以(和IMO应该)按照以下方式编写作业:
c = (char) (c - 32 + key + 127);
在Java中, 说明:,算术运算符总是在执行操作之前将其操作数提升为int
(或long
),结果为{{1} }(或int
)。这意味着,无论如何,您long
对c
的明确演员都会发生。
答案 3 :(得分:-1)
更改linke (char)c =(int)c -32 + key + 127; 至 c =(char)((int)c - 32 + key + 127);