【问题标题】:I keep getting the error, "The system couldn't find a suitable main method." - Java [closed]我不断收到错误消息,“系统找不到合适的主要方法。” -Java [关闭]
【发布时间】:2015-02-09 09:10:17
【问题描述】:

我正在为我的操作系统课程做一个项目,我们需要创建一个程序来读取 3 位整数的文本文件,解释整数的每个数字以完成指定的任务,然后打印出来执行结束时每个寄存器的值。

我确定我的代码并不完全有说服力,但我现在遇到的主要问题是每次尝试运行它时,都会收到错误“系统找不到合适的 main 方法”。没有编译器错误。 Java 文件的名称是“Assignment1.java” 任何帮助表示赞赏。

import java.util.Scanner;
import java.io.*;

public class Assignment1
{               
    public static void main(String[] args) throws FileNotFoundException
    {
        try
        {
            int counter = 0;
            int[] registers = new int[10]; // Create an array of integers to represent the instruction registers

                for(int i = 0; i < registers.length; i++) // Initialize each register to 0
                {
                    registers[i] = 0;
                }

            Scanner fileScan = new Scanner(new File("input1.txt"));
            fileScan.useDelimiter(" ");

            while(fileScan.hasNext())
            {
                number = fileScan.nextInt(); // Scan the instruction
                String instr = number.toString(); // Convert the instruction to a String

                if(instr.length()=3 && counter<=1000) // Verify no more than 1000 instructions will be executed and they are 3-digit numbers
                {
                    executeInstr(instr);
                }
            }

            System.out.println("Register 0:   " + registers[0]);
            System.out.println("Register 1:   " + registers[1]);
            System.out.println("Register 2:   " + registers[2]);
            System.out.println("Register 3:   " + registers[3]);
            System.out.println("Register 4:   " + registers[4]);
            System.out.println("Register 5:   " + registers[5]);
            System.out.println("Register 6:   " + registers[6]);
            System.out.println("Register 7:   " + registers[7]);
            System.out.println("Register 8:   " + registers[8]);
            System.out.println("Register 9:   " + registers[9]);
            System.out.println();
            System.out.println("Number of instructions executed:   " + counter);

        }

        catch(FileNotFoundException ex)
        {
            System.out.println("An error has occured. The file cannot be found.");
        }
    }

    public static void executeInstr(String s) // method to implement instructions
            {
                instruction = s;    
                counter++;
                int dig1 = (int)instruction.charAt(0); // convert first digit of the instruction to an integer variable
                int dig2 = (int)instruction.charAt(1); // convert second digit of the instruction to an integer variable
                int dig3 = (int)instruction.charAt(2); // convert third digit of the instruction to an integer variable

                case 1: dig1=1
                    break;
                case 2: dig1=2
                    registers[dig2]=dig3;
                    break;
                case 3: dig1=3
                    registers[dig2]=registers[dig2]+dig3;
                    break;
                case 4: dig1=4
                    registers[dig2]=registers[dig2]*dig3;
                    break;
                case 5: dig1=5
                    registers[dig2]=dig3;
                    break;
                case 6: dig1=6
                    registers[dig2]=dig2+dig3;
                    break;
                case 7: dig1=7
                    registers[dig2]=registers[dig2]*dig3;
                    break;
                case 8: dig1=8
                    break;
                case 9: dig1=9
                    break;
                case 10: dig1=0
                    break;
                default:
                    System.out.println("Invalid entry.");
                    break;
            }
}

【问题讨论】:

  • 您究竟是如何尝试运行它的?了解您使用的操作系统也可能会有所帮助。
  • 你确定你给我们看的代码就是你编译的代码吗?您发布的代码似乎有一个方法 (executeInstr) 直接嵌套在您的 main 方法中,这在 Java 中是不允许的。所以它不应该用你给我们的代码编译。
  • Windows 8.1。是的,整个代码就是我编译的。如果有什么不同,我会使用 JCreator Pro。
  • @John3136,如果您愿意阅读整个区块,您会发现它确实存在。当有人寻求帮助时,无需无礼。
  • 一个正确的 Java 编译器(带有嵌套的executeInstr)不会编译这个代码——句号。如果您认为它编译时没有错误,那么您显然错过了一些东西——例如,也许编译器实际上正在编译一个不同的Assignment1.java,而您在不同的文件夹/目录中。这也可以解释“无法运行”的问题。您可能想要编辑您的文件并在其中添加一个非常明显的错误,以确保编译器实际上正在编译您认为正在编译的文件。

标签: java arrays main-method


【解决方案1】:

我看到的一个问题是您在 main 方法中嵌套了 public static void executeInstr(String s)。这是禁止的。相反,将您的方法移动到您的 Assignment1 类中,就像您的 main 方法一样。

public class Assignment1 {
  public static void executeInstr(String s) {
    // your method logic here
  }

  public static void main(String[] args) {
    // your main program code here
    executeInstr(myString);
  }
}

这应该为你编译和运行。

【讨论】:

  • 我已经尝试过您的建议,但我仍然遇到同样的错误,尽管我知道这是问题的一部分。我正在编辑原始问题中的代码以反映这一点。感谢您的帮助。
  • @Morgan 也可能是您没有运行正确的文件。如果您选择在 IDE 中运行错误的文件或使用 java 命令输入文件名拼写错误,则可能会发生这种情况。确保运行 Assignment1
  • 原来我没有正确配置JDK。经过一些小的编辑,现在一切都运行正常。谢谢你的帮助!这就是导致我找到解决方案的原因。
  • @Morgan4568771 很高兴它有帮助。你能根除并接受答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 2014-04-12
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多