【问题标题】:Trouble calling these methods in my while loop在我的 while 循环中调用这些方法时遇到问题
【发布时间】:2021-08-10 11:51:48
【问题描述】:

我正在尝试使用以下方法为餐厅创建队列模拟:

队列模拟

    public static void queueSim(String filename) {
    System.out.println("=== queueSim ===");
    // Initialization
    ArrayList<String> dataAL = new ArrayList<>();
    ArrayList<Server> serverList = new ArrayList<Server>();

    String inputLine;

    // Read data from file into array list
    readDatafile(filename, dataAL);
    
    System.out.println(filename + " is used for this simulation.");
    System.out.println("Start simulation using filename -> " + filename);
    
    inputLine = dataAL.get(0); // first line of input data
    generatePrimarySecondaryServers(inputLine, serverList); //creates primary & secondary servers
    
    
    inputLine = dataAL.get(dataAL.size() - 1);
    int totalMinute = getTotalMinute(inputLine);
    
    System.out.println("\nTotal minute of simulation: " + totalMinute);
    
    int totalCustomers = dataAL.size() - 1;
    System.out.println("The total number of customers in this simulation is " + totalCustomers + ".");
    

    Queue pQueue = new Queue(dataAL.size() - 1); // creates primary queue
    Queue sQueue = new Queue(dataAL.size() - 1); // creates secondary queue
    
    
    int minute = 1;
    
     while (minute != totalMinute) {

        for (int loopCounter = 1; loopCounter < dataAL.size() - 1; loopCounter++) {
            
            inputLine = dataAL.get(loopCounter);
            int minuteArrive = getMinuteArrive(inputLine);
            int minuteForPServer = getMinuteForPrimaryServer(inputLine);
            int minuteForSServer = getMinuteForSecondaryServer(inputLine);
            
            Customer Customer = new Customer(minuteArrive, minuteForPServer, minuteForSServer);
        }
        
        processCustomer(Customer, pQueue, minuteArrive, minute);              
        processPServer(pQueue, serverList, minuteForPServer, minuteArrive, Customer);
        processPWork(serverList, sQueue, Customer);
        
        
        minute++;
        
    }
}

我在尝试让 while 循环正常工作时遇到问题。

         while (minute != totalMinute) {

        for (int loopCounter = 1; loopCounter < dataAL.size() - 1; loopCounter++) {
            
            inputLine = dataAL.get(loopCounter);
            int minuteArrive = getMinuteArrive(inputLine);
            int minuteForPServer = getMinuteForPrimaryServer(inputLine);
            int minuteForSServer = getMinuteForSecondaryServer(inputLine);
            
            Customer Customer = new Customer(minuteArrive, minuteForPServer, minuteForSServer);
        }
        
        processCustomer(Customer, pQueue, minuteArrive, minute);              
        processPServer(pQueue, serverList, minuteForPServer, minuteArrive, Customer);
        processPWork(serverList, sQueue, Customer);
        
        
        minute++;
        
    }

processCustomer、processPServer、processPWork 3 个方法告诉我参数中的某些变量无法解析。但是,如果我只是将这些方法放入嵌套的 for 循环中,我会在尝试编译时在 cmd 中得到以下输出,并且在不退出的情况下无法进行任何进一步的输入:

另外,考虑到我的模拟要求,我认为将这些方法放在 for 循环中没有多大意义。

如果我遗漏了任何重要的代码,我提前道歉,因为我对编程还很陌生。请让我知道,以便我可以编辑我的问题!任何帮助表示赞赏!

【问题讨论】:

  • 你可能想在 for 循环中移动你的 3 个方法

标签: java for-loop methods while-loop queue


【解决方案1】:

这些变量在“for”循环中定义:

        int minuteArrive = getMinuteArrive(inputLine);
        int minuteForPServer = getMinuteForPrimaryServer(inputLine);
        int minuteForSServer = getMinuteForSecondaryServer(inputLine);

因此,它们只存在于for循环内部,不能在外部访问。这与方法调用无关,这是声明变量的位置的结果。如果您想了解它,这个术语是“范围”。

由于循环执行了很多次,因此您为这些变量分配了许多不同的值,我不清楚您希望在循环之外对它们做什么。你想要哪个值?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多