首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java错误:顶层语句无效

Java错误:顶层语句无效
EN

Stack Overflow用户
提问于 2011-12-07 08:06:04
回答 2查看 10.8K关注 0票数 0

我在运行以下代码时遇到了问题。我不确定这样做是否正确,但我正在尝试让main方法读取两个文件,我将这两个文件作为参数传递给该方法。因此,在交互窗格中,我输入:run Main(customer.dat, smartphone.dat)

如果我尝试这样做,我会得到一个错误:invalid top level statement

我已经附加了下面的main方法。我错在哪里了?尽管代码可以编译,但我有一种感觉,我的readFile方法和/或调用main函数缺少一些东西。

提前感谢--我确实查看了类似的案例,但什么也没有出现。如果这种类型的问题以前被张贴过,我很抱歉。

代码语言:javascript
复制
import java.util.*;
import java.io.*;

public class Main
{
  private static ArrayList<Customer> customers = new ArrayList<Customer>(); // array-based list to store customers while reading file
  private static ArrayList<Smartphone> smartphones = new ArrayList<Smartphone>(); // array-based list to store smartphones while reading file
  private static MyPriorityQueueSmart[] sections = new MyPriorityQueueSmart[30]; // array of Queues to store sections of store with phones. 30 because max(model#%day = 30)
  private static MyPriorityQueueCust line = new MyPriorityQueueCust(); // Queue to simulate line outside the store

  private static void readFileCustomer(String file) // method to read customer.dat
  {
    try
    {
          FileReader input = new FileReader(file);
      BufferedReader bufRead = new BufferedReader(input);
      String line = "";
      line = bufRead.readLine(); // parses first line
      while(line != null)
      {
        String[] tokens = line.split("\\|"); // splits line by vertical bar
        String name = tokens[0]; 
        int patience = Integer.parseInt(tokens[1]);
        int speed = Integer.parseInt(tokens[2]);
        int strength = Integer.parseInt(tokens[3]);
        int budget = Integer.parseInt(tokens[4]);
        int PreferredModel = Integer.parseInt(tokens[5]);
        Customer cust = new Customer(name, patience, speed, strength, budget, PreferredModel); // constructs customer
        customers.add(cust);  // stores customer in list
        line = bufRead.readLine(); // parses next line
      }
    } 
    catch(IOException e) // error-checking
    {
      System.out.println("There was a problem reading the file");
      System.exit(0);
    }
  }

  private static void readFileSmartphone(String file) // method to read smartphone.dat
  {
    try
    {
      FileReader input = new FileReader(file);
      BufferedReader bufRead = new BufferedReader(input);
      String line = "";
      line = bufRead.readLine(); // parses first line
      while(line != null)
      {
        String[] tokens = line.split("\\|"); // splits line by vertical bar
        int model = Integer.parseInt(tokens[0]);
        int price = Integer.parseInt(tokens[1]);
        Smartphone smart = new Smartphone(model, price); // constructs smartphone
        smartphones.add(smart); // stores smartphone in list
        line = bufRead.readLine(); // parses nextl ine
      }
    } 
    catch(IOException e) // error-checking
    {
      System.out.println("There was a problem reading the file");
      System.exit(0);
    }
  }

  public static void main(String[] args) // string[] args should be the customer file name followed by the smartphone file name
  {
    if(args.length!=2) // error-checking
    {
      System.out.println("Must provide an argument: 2 files names");
      System.exit(0);
    }

    readFileCustomer(args[0]); // reads customer.dat
    readFileSmartphone(args[1]); // reads smartphone.dat

    Scanner scan = new Scanner(System.in); // 

    while(true)
    { 
      System.out.println("1 -- Load Additional Customers");
      System.out.println("2 -- Insert New Phone");
      System.out.println("3 -- Display Customers");
      System.out.println("4 -- Start Simulation");
      System.out.println("5 -- Exit");

      int choice = scan.nextInt();

      if(choice == 1)
      {
        System.out.println("Enter the file name of the customer data: ");
        String name = scan.next();
        readFileCustomer(name);
      }

      else if(choice == 2)
      {
        System.out.println("Enter model# (100, 200, 300, 400): ");
        int model = scan.nextInt();
        System.out.println("Enter price of phone: ");
        int price = scan.nextInt();
        Smartphone smart = new Smartphone(model, price);
        smartphones.add(smart);
      }

      else if(choice == 3)
      {
        for(Customer cust: customers)
        {
          System.out.println(cust.getName() + ", ");
        }
      }

      else if(choice == 4)
      {
        // Start Simulation
        System.out.println("Please enter the current day (#) of the month: "); // necessary for hashing
        int dayOfMonth = scan.nextInt(); // reads user-input for current day of the month
        if(dayOfMonth < 1 || dayOfMonth > 31) // error-checking
        {
          System.out.println("Invalid date. Please re-enter the current day (#) of the month: ");
          dayOfMonth = scan.nextInt();
        }

        // Reorganize customers into PQ -- simulating the "line" outside the doors according to skills
        for(Customer cust: customers) // iterates through array-based list of customers generated during file-reading
        {
          line.offer(cust); // builds the line of customers at the front of the store in order of ability
        }

        // Reorganize smartphones into PQ by type -- simulating the "most expensive" phones in order
        for(Smartphone smart: smartphones)
        {
          int model = smart.getModel(); // store model of current phone in list
          int hash = model % (dayOfMonth + 20); // generate hash tag
          boolean confirmAdd = false; // required for recursion -- will turn to true if phone is added
          while(confirmAdd = false)
          {
            if(sections[hash].isEmpty() == true || sections[hash].peek().getModel() == model) // check if hash index is empty or holds same model 
            {
              sections[hash].offer(smart); // add the phone to the PQ @ the index
              confirmAdd = true; // toggle to confirm the addition of the phone
            }
            else
              hash = (hash + 1) % 30; // linear probing
          }
        }

        // Customers leave line, go to section & buy most expensive phone if possible
        while(line.isEmpty() == false) // makes sure there are people in the line
        {
          Customer firstInLine = (Customer)line.peek(); // locates first customer in line
          int PreferredModel = firstInLine.getPreferredModel(); // stores preference of said customer
          int hash = PreferredModel%(dayOfMonth+20); // generates hash tag to direct customer to correct section
          if(sections[hash].isEmpty() == false) // makes sure the section has not sold out
          {
            if(firstInLine.getBudget() >= sections[hash].peek().getPrice()) // checks if phone is within budget of customer
            {
              Smartphone boughtPhone = (Smartphone)sections[hash].remove(); // customer buys phone and phone is removed from display
              System.out.println(firstInLine.getName() + "has bought phone model# " + boughtPhone.getModel() + "at the price of " + boughtPhone.getPrice()); // prints results
            }
            else // phone is out of budget of customer
              System.out.println(firstInLine.getName() + "cannot afford phone model# " + sections[hash].peek().getModel() + "at the price of " + sections    [hash].peek().getPrice() + "and leaves the store"); // prints results
          }
          else
          {
            System.out.println(firstInLine.getName() + "is out of luck. The phone he or she wants is sold out");
          }
          line.remove(); // as the first person in line has entered the store, he leaves the line and the line moves up
        }
      } // recursive loop until the line is empty

      else if(choice == 5)
      {
        System.exit(0);
      }

      else
      {
        System.out.println("Enter a number from 1 - 5");
      }
    }
  }
}  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-07 08:18:28

在快速搜索之后,我假设您使用的是DrJava及其交互窗格。

您不需要在run命令中使用这些括号。请尝试使用run Main customer.dat smartphone.dat

它将使用参数customer.datsmartphone.dat运行类Mainmain方法

Source

票数 0
EN

Stack Overflow用户

发布于 2014-07-23 11:50:10

不能调用main方法。它被称为main方法的原因是,当你不执行基于DOS的程序时,它会调用methods.but的其余部分。main方法与其他方法不同,不是强制性的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8408710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档