如何拆分用户作为输入提供的car
和color
的type
。
输入格式为:
<Type>#<Color>
输出将显示具有相同color
的汽车类型的数量
输入示例:
how many cars : 10
sedan#red
truck#yellow
van#white
suv#black
sedan#black
roadster#red
suv#gray
coupe#gray
minivan#white
truck#red
输出必须按字母顺序排序
black 2
gray 2
red 3
white 2
yellow 1
我尝试了一个示例代码,仍然没有完成,但是在如何拆分数组T^T
的问题上有些纠结
Class1
public class Class1 {
private String type ;
private String color;
private String format;
public Class1() {
this.type = "";
this.color = "";
this.format = "";
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public void split () {
String part[] = format.split("#");
setType(part[0]);
setColor(part[1]); // i don't know if this will work or not..
}
}
Class2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Class2 {
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
int n ;
String format ;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
Class1 [] dataArray = new Class1[n] ;
Class1 data = new Class1();
for(int a = 0 ; a <= dataArray.length ; a++) {
dataArray[a] = data;
data.setFormat(br.readLine());
data.split();
data.getType();
data.getColor();
}
}
}
编码仍然没有完成,并且仍然不知道如何拆分数组。请帮我解决这个问题!
发布于 2018-09-17 00:35:28
将您的for
循环改为:
for(int a = 0 ; a <= dataArray.length ; a++) {
dataArray[a] = data;
data.setFormat(br.readLine());
data.split();
data.getType();
data.getColor();
}
要这样做:
for(int a = 0 ; a < dataArray.length ; a++) {
Class1 data = new Class1();
dataArray[a] = data;
data.setFormat(br.readLine());
data.split();
data.getType();
data.getColor();
}
两个重要的变化是:
a < dataArray.length
时循环,否则你会得到一个ArrayIndexOutOfBoundsException
when a == dataArray.length
。每次读入新行时,您都需要创建一个新的Class1
实例,并将其存储在dataArray
的a
位置
除此之外,它看起来很好。显然,在您的设计中有一些吹毛求疵的地方--也许setFormat
应该调用split
,而不是需要一个单独的调用?--但是您现在应该能够遍历dataArray
并计算颜色,可能是使用Map<String, Integer>
发布于 2018-09-17 01:04:24
在for循环内初始化新的对象Class1 data = new Class1();
,而不是在它的外部初始化,否则它将在每次循环运行时被覆盖。
还要迭代通过a < dataArray.length
而不是a <= dataArray.length
。
我已经添加了groupingBy
来获取按颜色名称分组的计数。然后,我对结果Map<String, Integer>
的entrySet
进行了排序,并打印出了内容。
我已经实现了预期的输出,而没有对您的代码进行太多修改。
public static void main(String[] args){
try{
int numberOfCars;
String format ;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
numberOfCars = Integer.parseInt(br.readLine());
Class1 [] dataArray = new Class1[numberOfCars] ;
for(int a = 0 ; a < dataArray.length ; a++) {
//Initializing new instance everytime
Class1 data = new Class1();
data.setFormat(br.readLine());
data.split();
dataArray[a] = data;
}
//Creating a Stream of Class1 objects
Arrays.stream(dataArray)
.collect(Collectors.groupingBy(car -> car.getColor(), Collectors.counting()))
.entrySet() //Getting entries from Map
.stream() //sorting after the Map is created to preserve the sorted order
.sorted(Comparator.comparing(entry -> entry.getKey())) //Sorting by key, that is the Color property of Class1
.forEach((entry) -> System.out.println(entry.getKey() + " "+ entry.getValue()));
}catch (NumberFormatException | IOException | ArrayIndexOutOfBoundsException e) {
System.out.println("Error occurred try again");
e.printStackTrace();
}
}
https://stackoverflow.com/questions/52355978
复制相似问题