当前位置: 首页 > 知识库问答 >
问题:

在循环数组队列中查找最小值

孔才
2023-03-14
public class CanadaTour {
    
    
    private CircularArrayQueue<City> cityQueue;
    private Map map;
    private City startCity;
    
    
    public CanadaTour (String fileName) {
        map = new Map();
        cityQueue = new CircularArrayQueue<City>();
        loadData(fileName);
    }
    
    private void loadData (String file) {
        
        
        MyFileReader reader = new MyFileReader(file);
        
        reader.readString(); // First line of headers.
        
        String cityName = null;
        int locX = 0;
        int locY = 0;
        double earnings = 0;
        int cityID = 0;
        
        while (!reader.endOfFile()) {
            cityName = reader.readString();
            locX = reader.readInt();
            locY = reader.readInt();
            earnings = reader.readDouble();
            cityID ++;
            
            City city = new City(cityID, cityName, locX, locY, earnings);
            
            if (cityID == 1) {
                startCity = city;
            
            }
            cityQueue.enqueue(city);
            map.addCity(city);
        }
        
    }
    public City findNextCity (City currCity, double currMoney) {
        
        double distance = 0;
        
        City result = cityQueue.dequeue();
        if (result != currCity || result.isMarkedInStack() 
                || result.isMarkedOutOfStack())  //add other conditionals
            
            distance = distBetweenCities(result, currCity);
            cityQueue.enqueue(result);
            
        double distance1;   
        for (int i = 1; i < cityQueue.getLength(); i ++) {
            City result1 = cityQueue.dequeue();
            if (result1 != currCity || result1.isMarkedInStack() 
                    || result1.isMarkedOutOfStack()) { //add other conditionals
                
                distance1 = distBetweenCities(result1, currCity);
                if (distance1 < distance) {
                    distance = distance1;
                    return result1;
                }
                cityQueue.enqueue(result1);
                                
            }
        }
        return result;      
    }
    
    public double distBetweenCities (City city1, City city2) {
        
        double result =  Math.sqrt(Math.pow(city2.getX() - city1.getX(), 2) + 
                Math.pow(city2.getY() - city2.getY(), 2) * 1.0);
        return result;
        
    }
    
    public double calcFlightCost (double distance) {
        
        double flightCost;
        if (distance < 100.0) {
            flightCost = 127.00;
        } else {
            flightCost = (1.25 * distance) + 32.0;
        }
        
        return flightCost;
        
    }

到目前为止,这就是我的答案,但从逻辑上讲,我的答案对于findNextCity方法似乎是错误的。此外,我甚至不知道如何处理问题的第二部分(以下)。

我应该遍历cityQueue中的每个元素,使用下一种方法计算的欧几里德距离(distbetweencies),确定哪个元素最接近当前城市(从第一个参数)。我必须忽略已经标记在堆栈中或堆栈中的城市以及当前城市本身(否则,城市将始终是离自身最近的城市!)。如果找到的城市(与当前城市的距离最小)为null,则返回null。计算到这座城市的飞行费用,并确定用乐队目前的资金是否能负担得起。如果是,请返回城市,但如果负担不起,请返回null。

共有1个答案

高兴贤
2023-03-14

在不提供完整解决方案的情况下,您可能需要考虑以下几点:

  • 您似乎正在出队和入队以查看队列的头部。如果您的CircularArrayQueue实现了Queue,它应该有一个peek方法,可以查看头部而不删除它。
  • 过滤器条件中的或运算符可能应该是和(

您可能需要以下内容:

City closestCity = null;
for (City testCity: cityQueue) {
    if (testCity != currCity 
            && !testCity.isMarkedInStack() && !testCity.isMarkedOutOfStack()
            && (closestCity == null || distance(currCity, closestCity) > distance(currCity, testCity))
        closestCity == testCity;
}
 类似资料:
  • 假设我有一个大小为[10]的数组,当该数组被填满时,我想实现一个FIFO结构,而不是它只是填满了,因此无法向数组中添加新的东西,并抛出旧的东西。 例如,如果我有一个包含汽车制造商的字符串数组,当我的数组中有10个制造商时,我希望删除最旧的条目,添加最新的条目,但要考虑kepping FIFO。我如何在这样的方法中实现它:

  • 我有一个用于队列的迭代器类(实现为循环数组)。我在下面附上代码。问题出在++运算符上。一旦它到达数组的末尾,它就会回到它的开始,因此迭代器会指向第一个元素。它工作得很好,但我没有办法使用这种方法实现then end()迭代器。在队列类中返回begin()和end()迭代器的函数可以在底部看到。end()迭代器应该指向队列的后部,但是当数组已满且后部等于数组的大小时,++运算符将循环返回,而不是让它

  • 几周后我有期末考试,我们的练习题是这样的: 给定一个N个整数的队列,在队列中找到最小值并将其从队列中删除。当您完成时,其余的值必须按照它们原来的顺序。您只能使用队列操作,也就是说,您无权访问数组或链表中的基础存储。描述实现此操作的最省时的方法,并给出以N表示的顺序(大O)。 编辑:队列操作是“enqueue”、“dequeue”、“isfull”、“isempty”,如果是循环队列,则是“fron

  • 我试着解决这个数组列表问题,但没有成功 无论如何,在while循环中,我必须向ArrayList添加新的字符串项。 如果有一个重复的项目,应该有一个消息说重复的项目。 While循环将按单词结束中断

  • 问题内容: 我正在尝试创建两种方法,一种找到对象数组中的最小值,另一种找到对象数组中第二个最小值。 我已经这样写了两个 我已经找到了如何找到最小的值,我只需要找到第二个最小的值,我不确定怎么做。 有任何想法吗?谢谢! 问题答案: 像这样的东西: