如何将相同的字符串数组排序为新字符串并对其进行计数。

时间:2017-08-26 00:10:22

标签: java arrays

我正在做一个java项目,我想要排序相同的字符串数组,然后计算每个汽车品牌有多少。我被困在将数组传递给int变量。需要建议。谢谢。

public class SortCars {

public static void main(String[] args) {

    String[] cars = {"honda", "toyota", "honda", "toyota"};
    String[] honda = new String[5];
    String[] toyota = new String[5];
    int numOfHonda;
    int numOfToyota;

    for (int i = 0; i < cars.length; i++) {
        if (cars[i].equals("numOfHonda")) { //
            honda[i] = cars[i];
            honda[i] = numOfHonda; // stuck here 
            numOfHonda++;
        }
    }

}

}

4 个答案:

答案 0 :(得分:1)

如果您被允许使用Java 8,那将非常简单。这是代码。

String[] cars = {"honda", "toyota", "honda", "toyota"};
Map<String, Long> data = Arrays.stream(cars)
  .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(data); // => {toyota=2, honda=2}

答案 1 :(得分:1)

使用TreeMap-简单而精确的解决方案

String[] cars = {"honda", "toyota", "honda", "toyota"};

TreeMap<String, Integer> map = new TreeMap<>();

for(String s: cars){
    int count = map.containsKey(s) ? map.get(s) : 0;
    map.put(s, count+1);
}

System.out.println(map);

输出

{honda=2, toyota=2}

答案 2 :(得分:1)

您似乎对String和int值感到困惑。既然你说你正处于编程的开始一周,而且从我对问题的理解。这就是你要做的: -

public static void main(String[] args) {

    String[] cars = {"honda", "toyota", "honda", "toyota"};
    String[] honda = new String[5];
    String[] toyota = new String[5];
    int numOfHonda = 0;  // you need to initialize these int variables
    int numOfToyota = 0;

    for (int i = 0; i < cars.length; i++) {
        if (cars[i].equals("honda")) { // if cars has element honda
            honda[i] = cars[i];        // putting cars element in honda array
            numOfHonda++;             //incrementing value of numOfHonda by 1
        }
        else if(cars[i].equals("toyota")){
        toyota[i] = cars[i];
        numofToyota++;

    }
 }

现在打印numOfHonda和numofToyota将分别为您提供本田和丰田的数量。

除了我的回答,我想解决一些我在你的代码中发现的错误。

int numOfHonda;     //initilize your variable. Otherwise you will get compilation error! make it  = 0 in this case.
int numOfToyota;    // same here, initialize to 0.

if (cars[i].equals("numOfHonda"))

在这里,您尝试将cars [i]元素与字符串“numOfHonda”进行比较。如果您查看代码,则没有将此类字符串声明为“numofHonda”。有一件事是 int类型变量

equals()方法不会将int类型与String进行比较。它总是将String与String 进行比较。你把你的int变量 numofHonda 放在“”里面的事实并没有使它成为同一个东西! “numofHonda”和numHonda是不同的东西!

honda[i] = numOfHonda;

你被困在这里是因为你知道你在这做什么吗? 你试图把int类型变量(numOfHonda是int类型记得?) 在String数组中。这是不可能的。这是一种类型不匹配。任何类型的数组的基本定义是它拥有相同类型的元素。所以 honda [] 无法存储int类型的值。

希望你现在有一个更好的观点。继续学习。

答案 3 :(得分:0)

所以你想要查看一系列汽车并根据制造商将其分类到不同的阵列中?如果是这样,请按照我的方法进行:

import java.util.ArrayList;

String[] cars = {"honda", "toyota", "honda", "toyota"};
ArrayList<String> honda = new ArrayList<String>();
ArrayList<String> toyota = new ArrayList<String>();

for (int i = 0; i < cars.length; i++) {
    switch(cars[i]) {
        case "honda":
            honda.add(cars[i]);
        break;
        case "toyota":
            toyota(cars[i]);
        break;
    }
}

我建议使用ArrayList(java.util.ArrayList)更加通用。此外,我会使用switch语句。我不需要计算每个制造商的数量,只需通过honda.length检查。

编辑:深入解释

的ArrayList

好的,所以这里是一步一步。我的代码与你的代码并没有太大差别。我将制造商数组更改为ArrayList,这是一个&#39; CustomDatatype&#39;。它使用一个数组,但它为我们提供了一些功能,使它更容易与这个数组交互(例如.add()方法,以便轻松地向ArrayList添加一个元素)。要初始化ArrayList,我们需要调用new - 关键字,因为它是一个类而不是基本数据类型。我们还需要告诉Array它里面的元素有什么数据类型,这就是我们使用尖括号(ArrayList<ELEMENT_DATATYPE>()

开关()

switch statement接受你提供的任何内容。它作为括号中的参数,并尝试将其与switch函数中定义的情况相匹配。如果找到匹配,它将运行由案例定义的任何代码。切换语句也能够通过它来检查匹配,即使找到第一个也是如此,这可能很有用但是现在使用break语句来防止这种情况。一个正确的switch-case也有一个default的情况,当没有找到匹配时会运行,但由于复杂性,这也被遗漏了。 (@otherDevs:起诉我,我试图解释事情)

结论

我尝试使用您的方法展示一种方式并稍微改变它,但总的来说它是相同的,当然有很多方法来解决这些问题,如Map等等。但是,当你刚刚开始时,我建议你去了解基础知识。 AND 你真的应该熟悉Java-Docs,因为它有能力阅读和使用纯金作为开发人员的文档。