我正在开展一项小任务,允许用户输入任何国家/地区的区域并将其存储在一个阵列中。此外,每次他进入一个地区,系统都会要求他进入该输入地区的邻居并存储这些邻居。
我完成了整个任务,但我遇到了一个小问题:
我无法打印每个区域及其邻居,如下所示:
Region A: neighbour1 neighbour2
Region B: neighbour1 neighbour2
例如,让我们拍摄美国地图。我想打印结果如下:
Washington D.C: Texas, Florida, Oregon
等等。
我的代码是:
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
public class Test7{public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
System.out.print("Please enter the number of regions: ");
int REGION_COUNT = kb.nextInt();
String[] regionNames = new String[REGION_COUNT];
String[][] regions = new String[REGION_COUNT][2];
for (int r = 0; r < regions.length; r++) {
System.out.print("Please enter the name of region #" + (r + 1)
+ ": ");
regionNames[r] = kb.next();
System.out
.print("How many neighbors for region #" + (r + 1) + ": ");
if (kb.hasNextInt()) {
int size = kb.nextInt();
regions[r] = new String[size];
for (int n = 0; n < size; n++) {
System.out.print("Please enter the neighbour #" + (n)
+ ": ");
regions[r][n] = kb.next();
}
} else
System.exit(0);
}
for (int i = 0; i < REGION_COUNT; i++) {
System.out.print(regionNames[i] +": ");
for (int k = 0; k < 2; k++) {
System.out.print(regions[i][k]+", ");
}
System.out.println();
}
}
}
代码工作正常,但问题是仅打印结果。 另外,我应该使用二维数组。
答案 0 :(得分:1)
在我看来,你认为你的问题是处理锯齿状的二维阵列。我认为你的问题是你首先使用的是字符串数组。我建议使用一个类来模拟你的区域和它们的邻居,而不是一个字符串数组。
public class Region
{
private String Name;
public void setName( String name ) {
this.Name = name;
}
public String getName() {
return this.Name;
}
private ArrayList<Region> Neighbors;
public void addNeighbor( Region neighbor ) {
...
}
public ArrayList<Region> getNeighbors()
{
...
}
}
然后保留已知区域的哈希值,根据需要创建新区域,并根据需要使用这些区域填充区域的邻居。然后,您可以迭代哈希中的区域,并为每个区域迭代其邻居。
答案 1 :(得分:0)
这就是你想要的:
for (int i = 0; i < region.length; i++){
StringBuilder sb = new StringBuilder();
sb.append(region[i] + ": ");
for (int i2 = 0; i2 < neighbor.length; i2++){
if (i2 != 0 && i2 != neighbor.length-1){
sb.append(", " + neighbor[i2]);
}else{
sb.append(neighbor); //it still need a validation of an array of 2 Strings
}
}
System.out.println(sb.toString());
}