我正在开展一项小任务,允许用户输入任何国家/地区的区域并将其存储在一个阵列中。此外,每次他进入一个地区,系统都会要求他进入该输入地区的邻居并存储这些邻居。
我完成了整个任务,但我遇到了两个小问题:
我的代码如下:
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
public class Test6{
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[][] 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) + ": ");
String region = kb.nextLine();
System.out.print("How many neighbors for region #" + (r+1) + ": ");
if (kb.hasNextInt()) {
int size = kb.nextInt();
regions[r] = new String[size];
kb.nextLine();
for (int n = 0; n < size; n++) {
System.out.print("Please enter the neighbour #"
+ (n) + ": ");
regions[r][n] = kb.nextLine();
}
} else System.exit(0);
}
for(int i=0; i<REGION_COUNT; i++){
for(int k=0; k<2; k++){
System.out.println(regions[i][k]);
}
}
}
}
感谢大家的直接帮助。但是,让我向你解释一下我想要的更多细节。
首先,我需要使用二维数组。
其次,我现在的问题只是打印结果。我想打印结果,如下所示:
> RegionA : its neighbours
例如,让我们走美国
> Washington D.C: Texas, Florida, Oregon
--------------------------------------------------------------------------
亲爱的ykartal,
我使用了你的程序,它给了我以下内容:
答案 0 :(得分:1)
因为您正在使用nextLine,所以程序会为nextLine的第一次编辑使用next而不是nextline
A和B是地区的名称或字母顺序?如果字母65是'A'的aSCII等价而66是'B'......所以使用(char)65
写A.否则放区域名而不是(char)65+i
试试这个;
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
public class Test6{
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();
}
}
}
输出;
请输入地区数量:2
请输入区域#1的名称:aaa
区域#1:1的多少邻居
请输入邻居#0:a1
请输入区域#2的名称:bbb
区域#2:2的多少邻居
请输入邻居#0:b1
请输入邻居#1:b2
aaa:a1
bbb:b1 b2
注意:这不是一个好的代码,如果用户输入的是alfanumeric字符而不是您希望用户输入数值的数字,则必须处理。
答案 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);
}
}
System.out.println(sb.toString());
}
如果你在地图中操纵你的信息,我认为你会更容易。
试试这个
Map<String, List<String>> mapRegionNeighbor = new HashMap<String, List<String>>();
System.out.println("What region would you like to see?");
String regionName = scanner.nextLine();
List<String> neighborList = mapRegionNeighbor.get(regionName);
for(String neighbor : neighborList){
System.out.println(regionName + ": " + neighbor);
}
所以,基本上,如果你想向地区添加信息:
如果是新区域,请执行此操作
mapRegionNeighbor.put(regionName, new ArrayList<String>);
如果某个地区已经有了一个邻居列表,你可以这样做来添加一个新的邻居:
List<String> neighborList = mapRegionNeighbor.get(regionName);
neighborList.add(neighborName);
mapRegionNeighbor.put(regionName, neighborList);
以上3行只会更新您所在的地区。
要通过所有值打印邻居,请执行以下操作:
Iterator it = countedWords.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
for (String neighbor : pairs.getValue()){
System.out.println(pairs.getKey() + ": " + neighbor);
}
}