Java错误:顶层语句无效
我在运行以下代码时遇到问题。我不确定我是否做得对,但我正在尝试让main方法读取两个文件,作为参数传递给该方法。因此,在交互窗格中,我键入: 运行Maincustomer.dat、smartphone.dat 如果我尝试这样做,我会得到一个错误:顶层语句无效 我已附上以下主要方法。我哪里出错了?即使代码经过编译,我还是觉得我的readFile方法和/或调用main函数遗漏了一些东西 提前感谢-我确实查看了类似的案例,但是没有任何结果。我很抱歉,如果这种类型的问题已经张贴过Java错误:顶层语句无效,java,bluej,Java,Bluej,我在运行以下代码时遇到问题。我不确定我是否做得对,但我正在尝试让main方法读取两个文件,作为参数传递给该方法。因此,在交互窗格中,我键入: 运行Maincustomer.dat、smartphone.dat 如果我尝试这样做,我会得到一个错误:顶层语句无效 我已附上以下主要方法。我哪里出错了?即使代码经过编译,我还是觉得我的readFile方法和/或调用main函数遗漏了一些东西 提前感谢-我确实查看了类似的案例,但是没有任何结果。我很抱歉,如果这种类型的问题已经张贴过 import java
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");
}
}
}
}
快速搜索之后,我假设您使用的是DrJava及其交互窗格 在run命令中不需要这些括号。尝试运行Main customer.dat smartphone.dat 它将使用参数customer.dat和smartphone.dat运行main类的main方法
不能调用main方法。它之所以被称为main方法是因为它调用了其余的方法。但是,当您不执行基于DOS的程序时,main方法不是强制性的,这与其他方法不同。错误是来自程序还是您的IDE?如果代码编译得很好,就不太可能从程序中得到无效的顶层语句错误,因为这会被解析器捕获。什么是运行maincuster.dat,smartphone.dat-从几个方面来说,这不是Java语法。我很确定它来自IDE。我正在使用Java博士。也许我认为主要方法是错误的?代码编译时没有任何错误或警告。Sean,这就是我试图调用main方法的方式。你能解释一下正确的方法吗?这两个文件与程序位于同一目录中。我想以某种方式调用将文件名作为参数传递的main方法。非常感谢。这似乎就是问题所在。我不觉得自己很傻!