【问题标题】:How to check if an array contains elements?如何检查数组是否包含元素?
【发布时间】:2016-09-13 09:47:10
【问题描述】:

我是 Java 新手。

我有一个类似(Array) 的数组。 (我使用 Array.toString 来打印这个)。这就是数组的制作方式:arraymade。 这是从这种格式的文件中读取和制作的:

Nilsson;Lars;u;g;vg;vg
Svensson;Lena;vg;g;g;vg
Jonsson;Jonas;g;g;vg;g

我正在尝试创建一个返回“u”、“vg”或“g”的方法,具体取决于对象数组包含的内容。

@Override
public String getKursbetyg() {



    if (Arrays.asList(uppgiftsbetyg).contains("u")) {
        kursbetyg = "u";
        return kursbetyg;

    } else if (Arrays.asList(uppgiftsbetyg).contains("if the array contains 2 vg strings")) {
        kursbetyg = "vg";
        return kursbetyg;

    } else {
        kursbetyg = "g";
        return kursbetyg;
    }

}

这是我现在拥有的代码,但它似乎不起作用,因为即使数组包含“u”,它也只返回“g”。

正如您所看到的,我希望该方法仅在找到 2 个 vg:s 时返回 vg,因为您需要 2 个 vg:s 才能获得等级 vg。那么如何在这里检查双重元素呢?

【问题讨论】:

  • 是一维数组还是二维数组?
  • 你的数组图片显示了3个不同的数组,[u, g, vg], [vg, g, g], [g, g, vg],你用的是哪个数组?你能告诉我们你在哪里设置 pgiftsbetyg 吗?
  • 我添加了一张数组是如何制作的图片。

标签: java arrays object methods element


【解决方案1】:

首先,您应该重新考虑您的要求。一个字符串(如u)的存在并不排除其他字符串的不存在(如两个vgs 或一个g),也不排除u 和两个vgs 的存在g。您发布的示例在这方面已经不一致。

除此之外,您的方法缺少变量 kursbetyg 的声明,我真的希望您不会因为“get...”方法的副作用而修改字段。

您可以通过搜索不包括第一个匹配项的子列表来直接搜索两个匹配项:

public String getKursbetyg() {
    List<String> list = Arrays.asList(uppgiftsbetyg);
    if(list.contains("u")) {
        return "u";
    }
    int index=list.indexOf("vg");
    if(index>=0 && list.subList(index+1, list.size()).contains("vg")) {
        return "vg";
    }
    return "g";
}

更接近原始结构的解决方案,也可能被认为更简单

public String getKursbetyg() {
    List<String> list = Arrays.asList(uppgiftsbetyg);
    if(list.contains("u")) {
        return "u";
    } else if(Collections.frequency(list, "vg")>=2) {
        return "vg";
    } else {
        return "g";
    }
}

但它可能会不必要地计算 vg 的出现次数超出 2 的次数。

【讨论】:

    猜你喜欢
    • 2016-10-13
    • 2017-11-24
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2013-07-29
    相关资源
    最近更新 更多