【问题标题】:need help on compiler errors需要有关编译器错误的帮助
【发布时间】:2014-02-15 23:50:09
【问题描述】:
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);
                }
            }

        }
    }
}

这段代码给了我两个对我来说没有多大意义的错误。据我所知,我没有做任何与以前不同的事情。

错误:

  1. 错误的构造函数
  2. {" 预期

【问题讨论】:

  • 加一个java的语言标签,让别人一眼就知道你用的是什么语言。
  • 此外,我们无法看到的错误对我们来说毫无意义。如果你想要一个体面的答案,你必须复制粘贴它们。
  • @ExcelledProducts - 这可能>>是
  • @StephenC 在它甚至不是代码之前。这只是我的眼睛无法理解的东西。

标签: java compilation compiler-errors


【解决方案1】:
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) 构造函数错位是因为你没有 {

【讨论】:

    【解决方案2】:

    有趣的是,除了这一行之外,我没有看到任何代码错误(或者当我使用 IntelliJ 格式化时没有看到):

    (char) c = (int) c - 32 + key + 127;
    

    您正在将要存储在char 中的内容转换为int。那是行不通的。

    修正您的演员表以包含您想要演员表的整个范围。转换为 char 是多余的,因为 cchar

    c = (char) (c - 32 + key + 127);
    

    【讨论】:

      【解决方案3】:

      问题是由这个引起的:

          {
              (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),结果为int(或long) )。这意味着您将c 显式转换为int 无论如何都会发生。

      【讨论】:

        【解决方案4】:

        更改链接 (char)c = (int)c -32 + key + 127; 到 c = (char) ((int) c - 32 + key + 127);

        【讨论】:

        • 我不认为在这种情况下这样的铸造级联是一个好主意。
        • @Zegar - 没有必要。请参阅我的答案的结尾。
        猜你喜欢
        • 2011-02-22
        • 2011-02-21
        • 2023-03-08
        • 2020-06-17
        • 1970-01-01
        • 2010-09-23
        • 1970-01-01
        • 1970-01-01
        • 2015-04-13
        相关资源
        最近更新 更多