BigestCountries类有一个代码。
它由2个数组组成:
df = pd.read_excel('excel_file.xlsx')
data = pd.DataFrame(df, columns=['A', 'B', 'C', 'D', 'E'])
A B C D E
12 bob 32 abc 123
12 jan 34 fbc 23
14 jan 32 ac 133
12 cat 32 abc 123
list[0] = [[12 bob 32 abc 123]]
list[1] = [[12 jan 34 fbc 23][14 jan 32 ac 133]]
list[2] = [[12 cat 32 abc 123]]
答案 0 :(得分:1)
方法getCountriesFoundedBetween()
可以以不同的方式实现,而无需嵌套循环,如下所示。
private static String[] getCountriesFoundedBetween(int min, int max) {
if (max < min) {
throw new IllegalArgumentException("'max' less than 'min'");
}
String[] countriesFoundedBetween;
int countriesMatched = 0;
int[] indexes = new int[biggestCountries.length];
if (biggestCountries != null && biggestCountries.length > 0) {
for (int i = 0; i < biggestCountries.length; i++) {
if(countryData[i][COUNTRY_AGE_FOUNDED] >= min &&
countryData[i][COUNTRY_AGE_FOUNDED] <= max) {
indexes[countriesMatched++] = i;
}
}
countriesFoundedBetween = new String[countriesMatched];
for (int i = 0; i < countriesMatched; i++) {
countriesFoundedBetween[i] = biggestCountries[indexes[i]][COUNTRY_NAME];
}
}
else {
countriesFoundedBetween = new String[0];
}
return countriesFoundedBetween;
}
上面的代码还返回了一个空数组,而不是null,这对于返回数组的方法是更可取的。
这是一个使用人口来确定最大国家的完整示例。
public class Countrys {
private static final int CHINA = 0;
private static final int INDIA = 1;
private static final int U_S_A = 2;
private static final int INDONESIA = 3;
private static final int PAKISTAN = 4;
private static final int BRAZIL = 5;
private static final int NIGERIA = 6;
private static final int BANGLADESH = 7;
private static final int RUSSIA = 8;
private static final int MEXICO = 9;
private static final int COUNTRY_NAME = 0;
private static final int COUNTRY_CONTINENT = 1;
private static final int COUNTRY_POPULATION = 0;
private static final int COUNTRY_AGE_FOUNDED = 1;
private static int[][] countryData = new int[][]{{1_427_647_786, 1949},
{1_352_642_280, 1950},
{ 328_239_523, 1776},
{ 273_523_615, 1945},
{ 220_892_340, 1947},
{ 210_147_125, 1889},
{ 206_139_589, 1960},
{ 164_689_383, 1971},
{ 144_384_244, 1991},
{ 128_932_753, 1810}};
private static String[][] biggestCountries = new String[][]{{"China" , "Asia"},
{"India" , "Asia"},
{"U.S.A." , "North America"},
{"Indonesia" , "Asia"},
{"Pakistan" , "Asia"},
{"Brazil" , "South America"},
{"Nigeria" , "Africa"},
{"Bangladesh", "Asia"},
{"Russia" , "Europe"},
{"Mexico" , "North America"}};
private static String[] getCountriesFoundedBetween(int min, int max) {
if (max < min) {
throw new IllegalArgumentException("'max' less than 'min'");
}
String[] countriesFoundedBetween;
int countriesMatched = 0;
int[] indexes = new int[biggestCountries.length];
if (biggestCountries != null && biggestCountries.length > 0) {
for (int i = 0; i < biggestCountries.length; i++) {
if(countryData[i][COUNTRY_AGE_FOUNDED] >= min &&
countryData[i][COUNTRY_AGE_FOUNDED] <= max) {
indexes[countriesMatched++] = i;
}
}
countriesFoundedBetween = new String[countriesMatched];
for (int i = 0; i < countriesMatched; i++) {
countriesFoundedBetween[i] = biggestCountries[indexes[i]][COUNTRY_NAME];
}
}
else {
countriesFoundedBetween = new String[0];
}
return countriesFoundedBetween;
}
public static void main(String[] args) {
String[] result = getCountriesFoundedBetween(1950, 1980);
System.out.println(Arrays.toString(result));
}
}
运行上面的代码将产生以下输出:
[India, Nigeria, Bangladesh]
答案 1 :(得分:0)
BigestCountries
命名,它仍然具有属性biggestCountries
,该属性是一个数组,其中包含有关最大国家/地区的信息,我认为您没有在利用OO的潜力。Country
的数据。使用数据封装,您可以摆脱嵌套数组,从而摆脱嵌套循环和控制流语句(中断,继续等),查找索引常量,保持索引biggestCountries
和countryData
之间的同步,等等。 / li>
ArrayList
ageFound
应该命名为yearFound
?重构代码
Country.java
public class Country {
private String name;
private int population;
private int yearFound;
private String continent;
public Country(String name, String continent, int year, int population) {
this.name = name;
this.population = population;
this.continent = continent;
this.yearFound = year;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPopulation() {
return population;
}
public void setPopulation(int population) {
this.population = population;
}
public String getContinent() {
return continent;
}
public void setContinent(String continent) {
this.continent = continent;
}
public int getYearFound() {
return yearFound;
}
public void setYearFound(int yearFound) {
this.yearFound = yearFound;
}
@Override
public String toString() {
return "Country [name=" + name + ", population=" + population + ", yearFound=" + yearFound + ", continent="
+ continent + "]";
}
}
BiggestCountries.java
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class BiggestCountries {
private List<Country> countries = new ArrayList<Country>() {
{
add(new Country("China", "Asia", 1949, 1433783686));
add(new Country("Canada", "North America", 1867, 37590000));
add(new Country("United States", "North America", 1776, 328200000));
}
};
public List<Country> getCountriesFoundedBetween(int min, int max) {
List<Country> matchedCountry = new ArrayList<Country>();
Iterator<Country> itrCoutnry = countries.iterator();
while (itrCoutnry.hasNext()) {
Country country = itrCoutnry.next();
int yearFound = country.getYearFound();
if (min < yearFound && max > yearFound) {
matchedCountry.add(country);
}
}
return matchedCountry;
}
}
测试运行
public static void main(String[] args) {
List<Country> matchedCountries = new BiggestCountries().getCountriesFoundedBetween(1700, 1899);
System.out.println(matchedCountries);
}
结果
[Country [name=Canada, population=37590000, yearFound=1867, continent=North America], Country [name=United States, population=328200000, yearFound=1776, continent=North America]]