我正在做一个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++;
}
}
}
}
答案 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,这是一个&#39; CustomDatatype&#39;。它使用一个数组,但它为我们提供了一些功能,使它更容易与这个数组交互(例如.add()
方法,以便轻松地向ArrayList添加一个元素)。要初始化ArrayList,我们需要调用new
- 关键字,因为它是一个类而不是基本数据类型。我们还需要告诉Array它里面的元素有什么数据类型,这就是我们使用尖括号(ArrayList<ELEMENT_DATATYPE>()
)
switch statement接受你提供的任何内容。它作为括号中的参数,并尝试将其与switch函数中定义的情况相匹配。如果找到匹配,它将运行由案例定义的任何代码。切换语句也能够通过它来检查匹配,即使找到第一个也是如此,这可能很有用但是现在使用break
语句来防止这种情况。一个正确的switch-case也有一个default
的情况,当没有找到匹配时会运行,但由于复杂性,这也被遗漏了。 (@otherDevs:起诉我,我试图解释事情)
我尝试使用您的方法展示一种方式并稍微改变它,但总的来说它是相同的,当然有很多方法来解决这些问题,如Map
等等。但是,当你刚刚开始时,我建议你去了解基础知识。 AND 你真的应该熟悉Java-Docs,因为它有能力阅读和使用纯金作为开发人员的文档。