试图在if函数JAVA中获取相同值的2d数组

试图在if函数JAVA中获取相同值的2d数组,java,arrays,Java,Arrays,嗨,我的任务快结束了,但我似乎无法将我的产值计算到加拿大各大城市的人均产值,这些城市也是该省的省会城市。下面是我的代码,在一个单独的框中是我的方法代码。提前谢谢 public class Canada { public static final int BC = 0; public static final int AB = 1; public static final int ON = 2; public static final int QC = 3;

嗨,我的任务快结束了,但我似乎无法将我的产值计算到加拿大各大城市的人均产值,这些城市也是该省的省会城市。下面是我的代码,在一个单独的框中是我的方法代码。提前谢谢

public class Canada
{
    public static final int BC = 0;
    public static final int AB = 1;
    public static final int ON = 2;
    public static final int QC = 3;
    public static final int NL = 4;
    public static final int PE = 5;
    public static final int NS = 6;
    public static final int NB = 7;
    public static final int MB = 8;
    public static final int SK = 9;
    public static final int NU = 10;
    public static final int YT = 11;
    public static final int NT = 12;

    public static final int NAME_OF_PROVINCE = 0;
    public static final int NAME_OF_CAPITAL_CITY = 1;
    public static final int NAME_OF_BIGGEST_CITY = 2;

    public String[][] provinces;
    public Canada()
    {
        provinces = new String[13][3];

        provinces[BC][NAME_OF_PROVINCE] = "british columbia";
        provinces[BC][NAME_OF_CAPITAL_CITY] ="victoria";
        provinces[BC][NAME_OF_BIGGEST_CITY] ="vancouver";

        provinces[AB][NAME_OF_PROVINCE] = "alberta";
        provinces[AB][NAME_OF_CAPITAL_CITY] ="edmonton";
        provinces[AB][NAME_OF_BIGGEST_CITY] ="calgary";

        provinces[ON][NAME_OF_PROVINCE] = "ontario";
        provinces[ON][NAME_OF_CAPITAL_CITY] ="toronto";
        provinces[ON][NAME_OF_BIGGEST_CITY] ="toronto";

        provinces[QC][NAME_OF_PROVINCE] = "quebec";
        provinces[QC][NAME_OF_CAPITAL_CITY] ="quebec city";
        provinces[QC][NAME_OF_BIGGEST_CITY] ="montreal";

        provinces[NL][NAME_OF_PROVINCE] = "newfoundland";
        provinces[NL][NAME_OF_CAPITAL_CITY] ="st johns";
        provinces[NL][NAME_OF_BIGGEST_CITY] ="st johns";

        provinces[PE][NAME_OF_PROVINCE] = "prince edward island";
        provinces[PE][NAME_OF_CAPITAL_CITY] ="charlottetown";
        provinces[PE][NAME_OF_BIGGEST_CITY] ="charlottetown";

        provinces[NS][NAME_OF_PROVINCE] = "nova scotia";
        provinces[NS][NAME_OF_CAPITAL_CITY] ="halifax";
        provinces[NS][NAME_OF_BIGGEST_CITY] ="halifax";

        provinces[NB][NAME_OF_PROVINCE] = "new brunswick";
        provinces[NB][NAME_OF_CAPITAL_CITY] ="fredericton";
        provinces[NB][NAME_OF_BIGGEST_CITY] ="saint john";

        provinces[MB][NAME_OF_PROVINCE] = "manitoba";
        provinces[MB][NAME_OF_CAPITAL_CITY] ="winnipeg";
        provinces[MB][NAME_OF_BIGGEST_CITY] ="winnipeg";

        provinces[SK][NAME_OF_PROVINCE] = "saskatchewan";
        provinces[SK][NAME_OF_CAPITAL_CITY] ="regina";
        provinces[SK][NAME_OF_BIGGEST_CITY] ="saskatoon";

        provinces[NU][NAME_OF_PROVINCE] = "nunavut";
        provinces[NU][NAME_OF_CAPITAL_CITY] ="iqaluit";
        provinces[NU][NAME_OF_BIGGEST_CITY] ="iqaluit";

        provinces[YT][NAME_OF_PROVINCE] = "yukon";
        provinces[YT][NAME_OF_CAPITAL_CITY] ="whitehorse";
        provinces[YT][NAME_OF_BIGGEST_CITY] ="whitehorse";

        provinces[NT][NAME_OF_PROVINCE] = "northwest territories";
        provinces[NT][NAME_OF_CAPITAL_CITY] ="yellowknife";
        provinces[NT][NAME_OF_BIGGEST_CITY] ="yellowknife";
    }
}

下面是我的方法代码,我正试图以和省会城市相同的大城市拉动产出。和多伦多一样,多伦多也是安大略省的省会城市,也是安大略省最大的城市。然而,温哥华是不列颠哥伦比亚省最大的城市,但不是首都。我尝试了各种各样的组合,它要么总是输出不计算,要么只输出我输入的城市

p、 我知道2d数组代码很糟糕,但这是老师设置这个问题初始构建的方式

public String getProvinceWhoseCapitalsIs(String city) // return
{
    String sameCity = "not computing";
    for(int i = 0;i<provinces.length;i++)
    {
        if(city == null || city.isEmpty())
        {
            throw new IllegalArgumentException("Please enter correct province name");
        }
        if(city == provinces[i][1] && city == provinces[i][2])
        {
            city = provinces[i][1];

        }
        break;
    }
    return city;
}
public String getProvinceWhoseCapitalsIs(String city)//返回
{
字符串sameCity=“不计算”;

对于(int i=0;i我认为问题在于循环条件

for(int i=0;i<province[i].length;i++)

for(int i=0;i您的代码中有三个问题:

  • 您正在使用
    city==省[i][1]
    city==省[i][2]
    来比较字符串,这不是比较字符串的正确方法。请注意
    ==
    只比较引用,而不比较字符串的内容
  • 您已将
    break
    语句置于
    if
    块之外(当找到匹配的
    city
    时,该语句将计算
    true
    )。因此,无论数组中的元素数量如何,
    省份以及是否找到匹配项,
    for
    循环只执行一次
  • 如果我正确理解了
    getprovincewhosecapitalis
    的目的,它应该返回省名而不是城市名。因此,您应该返回
    省[I][0]
    ,而不是
    省[I][1]
  • 如果您的方法不打算这样做,您可以忽略上面提到的第三点

    按如下方式操作:

    public String getProvinceWhoseCapitalsIs(String city) {
        String province = "";
        if (city == null || city.isEmpty()) {
            throw new IllegalArgumentException("Please enter correct province name");
        }
        for (int i = 0; i < provinces.length; i++) {
            if (city.equalsIgnoreCase(provinces[i][1])) {
                province = provinces[i][0];
                break;
            }
        }
        return province;
    }
    
    输出:

    ontario
    
    public class Main {
        public static void main(String[] argv) {
            Canada canada = new Canada();
            System.out.println(canada.getBiggestCapitalCities());
        }
    }
    
    [toronto, st johns, charlottetown, halifax, winnipeg, iqaluit, whitehorse, yellowknife]
    
    [另一个更新]

    根据您的评论,我了解到您正在寻找一种方法来获取最大首都城市的列表。为了满足此要求,您需要将以下方法放入
    加拿大类中

    public List<String> getBiggestCapitalCities() {
        List<String> cities = new ArrayList<String>();
        for (int i = 0; i < provinces.length; i++) {
            if (provinces[i][1].equalsIgnoreCase(provinces[i][2])) {
                cities.add(provinces[i][1]);
            }
        }
        return cities;
    }
    
    输出:

    ontario
    
    public class Main {
        public static void main(String[] argv) {
            Canada canada = new Canada();
            System.out.println(canada.getBiggestCapitalCities());
        }
    }
    
    [toronto, st johns, charlottetown, halifax, winnipeg, iqaluit, whitehorse, yellowknife]
    
    public String getProvinceWhoseCapitalsIs(String city)//返回
    {
    字符串sameCity=null;
    
    for(int i=0;我仔细查看搜索
    数组的循环。想想测试
    i
    真的是指。难道
    没有更大的意义吗?嗨,谢谢你的回复!我当时真的有过它,但我一直在忙着换东西。换回来后,它似乎不起作用了(int i=0;iHi我刚刚尝试了这个方法,但是我输入的城市的输出仍然是我输入的,而不是返回具有相同首都和大小的城市。@zeniya-您可能在输入时出错。我建议您复制我的代码(即,
    getProvinceWhoseCapitalsIs
    )并粘贴到
    Canada
    类中。我刚刚发布了一个测试代码,以证明我的代码运行良好。不,我正在尝试获得与输出匹配的城市!温哥华是不列颠哥伦比亚省最大的城市,但不是首都,所以输出为空多伦多是ON中最大的城市,也是首都,所以应该输出!然而,您的评论已将我在正确的轨道上,我已经找到了答案。非常感谢。好的。我已经发布了另一个更新,应该满足您的要求。如果有任何疑问/问题,请随时发表评论。