解决递归和无限循环问题

本文关键字:问题 无限循环 递归 解决 | 更新日期: 2024-09-27 03:25:51

我目前正在编写一个从文本文件中读取数据的程序。我目前遇到的问题是,下面的CompareTo方法出现错误System.StackOverflowException was unhandled,并说"确保你没有无限循环或无限递归。这个错误出现在return name.CompareTo(temp.name);行。

整个类别如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Country
{
    public class Country : IComparable
    {
        // Country Properties
        private String name;
        private float gdpGrowth;
        private float inflation;
        private float tradeBalance;
        private float hdiRanking;
        private LinkedList<String> tradePartners;
        //Constructor
        public Country(String name, float gdpGrowth, float inflation, float tradeBalance, float hdiRanking, LinkedList<String> tradePartners)
        {
            this.name = name;
            this.gdpGrowth = gdpGrowth;
            this.inflation = inflation;
            this.tradeBalance = tradeBalance;
            this.hdiRanking = hdiRanking;
            this.tradePartners = tradePartners;
        }
        public String Name
        {
            set { this.name = value; }
            get { return name; }
        }
        public float GdpGrowth
        {
            set { this.gdpGrowth = value; }
            get { return gdpGrowth; }
        }
        public float Inflation
        {
            set { this.inflation = value; }
            get { return inflation; }
        }
        public float TradeBalance
        {
            set { this.tradeBalance = value; }
            get { return tradeBalance; }
        }
        public float HdiRankings
        {
            set { this.hdiRanking = value; }
            get { return hdiRanking; }
        }
        public LinkedList<String> TradePartners
        {
            set { this.tradePartners = value; }
            get { return tradePartners; }
        }
        public override string ToString()
        {
            return name + ", " + gdpGrowth + ", " + inflation + ", " + tradeBalance + ", " + hdiRanking + ", " + tradePartners;
        }
        public int CompareTo(object other)
        {                
            Country temp = (Country)other;
            return name.CompareTo(temp.name);
        }    
    }
}

称之为国家级的班级是…

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Country
{
    public partial class Form1 : Form
    {
        private AVLTree<Country> countryTree = new AVLTree<Country>();


        public Form1()
        {
            InitializeComponent();
        }
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
            // array to stroe each line of the file
            String[] Lines = new string[1000];
            String[] tempPartners = new string[1000];
            int count = 0;
            // Store each line of the file in the eachLine array
            Lines = File.ReadAllLines("countries.csv");
            foreach (String line in Lines)
            {
                if (count == 0)
                {
                    count++;
                }
                else
                {
                    // array to hold info
                    String[] info = new string[5];
                    //splits the countries
                    info = line.Split(',');
                    // split trade partners and puts in array
                    tempPartners = info[5].Split(';', '[', ']');
                    // insert current instance of country into AVL Tree
                    countryTree.InsertItem(new Country(info[0], float.Parse(info[1]), 
                    float.Parse(info[2]), float.Parse(info[3]), float.Parse(info[4]), new LinkedList<String>(tempPartners)));

                    // create seperator 
                    string seperator = ", ";
                    // stroe array
                    string partners = string.Join(seperator, tempPartners);
                    // remove first comma
                    partners = partners.Substring(1, partners.Length - 1);
                    //remove last comma
                    partners = partners.Remove(partners.Length - 2);
                    //pass in information from file into grid view
                    dataGridView1.Rows.Add(info[0], info[1], info[2], info[3], info[4], partners);
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }
}

解决递归和无限循环问题

这里有无限递归。CompareTo进行递归调用,但由于缺少基本情况而没有终止,因此递归堆栈增长为无限。也没有进行实际的比较。您希望返回什么整数值,在什么条件下返回?

也许正如CyberDude所说,你真的在尝试使用String.Compare(name, temp.name)