Java-fout: ongeldige verklaring op hoogste niveau

I am having trouble running the following code. Not sure if I am doing this right, but I am trying to have the main method read two files that I am passing to the method as arguments. So in the interactions pane, I am typing: run Main(customer.dat, smartphone.dat)

If I try to do this, I get an error: invalid top level statement

Ik heb de onderstaande hoofdmethode bijgevoegd. Waar ga ik mis? Hoewel de code compileert, heb ik het gevoel dat ik iets mis met mijn readFile-methoden en/of de hoofdfunctie.

Bij voorbaat dank, ik heb voor vergelijkbare gevallen door SO gekeken, maar er is niets uit de bus gekomen. Mijn excuses als dit soort vraag eerder is geplaatst.

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

public class Main
{
  private static ArrayList customers = new ArrayList();//array-based list to store customers while reading file
  private static ArrayList smartphones = new ArrayList();//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");
      }
    }
  }
}  
0
Wat is "hoofdgebruiken (customer.dat, smartphone.dat)" - dit is geen Java-syntax, op verschillende manieren.
toegevoegd de auteur Sean Owen, de bron
Is de fout van het programma of uw IDE? Als de code goed compileert, is het niet waarschijnlijk dat u een ongeldige instructie op het hoogste niveau uit het programma krijgt omdat deze door de parser zou worden gepakt.
toegevoegd de auteur RCE, de bron
Ik ben er vrij zeker van dat het van de IDE komt. Ik gebruik Dr Java. Misschien noem ik de hoofdmethode verkeerd? De code compileert zonder fouten of waarschuwingen.
toegevoegd de auteur Milan Patel, de bron
Sean, zo probeer ik de hoofdmethode te noemen. Kun je de juiste manier uitleggen om dat te doen? Beide bestanden bevinden zich in dezelfde map als het programma. Ik wil op de een of andere manier de hoofdmethode bellen door de bestandsnamen door te geven als argumenten.
toegevoegd de auteur Milan Patel, de bron

2 antwoord

Na snel rond te hebben gezocht, ga ik ervan uit dat je DrJava en zijn interactiescherm gebruikt.

U hebt deze haakjes niet nodig in de opdracht Uitvoeren. Probeer in plaats daarvan Main customer.dat smartphone.dat uit te voeren.

That will run the main method of class Main with arguments customer.dat and smartphone.dat

Bron

0
toegevoegd
Dank u zeer. Dat leek het probleem te zijn. Ik voel me niet gek!
toegevoegd de auteur Milan Patel, de bron

je kunt de hoofdmethode niet bellen. de reden dat het de hoofdmethode wordt genoemd, is omdat het de rest van de methoden aanroept.maar als je geen op DOS gebaseerd programma doet, is de hoofdmethode niet verplicht anders dan anders.

0
toegevoegd