我正在开展一项小任务,允许用户输入任何国家/地区的区域并将其存储在一个阵列中。此外,每次他进入一个地区,系统都会要求他进入该输入地区的邻居并存储这些地区。
我的想法是,每当用户进入该区域时,系统会将其存储在arrya中,每次进入某个区域时,系统会要求他在进入第二个区域之前进入该区域的邻居。 on,并将这些输入存储在第一个数组中相关条目的指针下的第二个数组中。
我所做的只是开头,如下:
import java.util.Arrays;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String [] regionArray = new String[5];
for (int i = 0; i < regionArray.length; i++) {
System.out.print("Please enter the region: ");
regionArray[i] = kb.next();
//kb.nextLine(); // to get and discard the nextline token
}
System.out.print("You have entered: ");
System.out.println(Arrays.toString(regionArray));
}
}
例如,假设我们有4个区域:a,b,c,d,a有两个邻居:b和d。在这种情况下,当用户进入第一个区域(a)时,他将被要求输入其b和d的邻居,然后他将能够进入第二个区域,即b等等。
现在的问题,我如何生成第二个数组并将其链接到第一个数组?
请帮帮我
感谢您的帮助。我真的很感激。
现在我已经使用了Hashmap,一切运行良好但我在检索特定区域或邻居时遇到了另一个问题。除此之外,我需要检索它们中的每一个,以便能够对它们中的每一个应用四色定理,那么我该怎么做呢?
我的代码如下:
import java.util.*;
import java.util.HashMap;
public class Test5{
public static void main(String[]args){
HashMap<String, String> neighbour = new HashMap<String, String>();
Scanner kb = new Scanner(System.in);
for(;{
System.out.println ("Enter the neighbours first then the region... and when finished press q");
String n = kb.nextLine();
if (n.equalsIgnoreCase("Q"))
break;
System.out.print("region: ");
String region = kb.nextLine();
neighbour.put(region, n);
}
System.out.println(neighbour);
}
}
答案 0 :(得分:2)
我建议您使用集合,例如Map&lt; String,Set&lt; String&gt;&gt;其中键是区域,而Set包含相邻区域。我还会维护一组尚未输入邻居的区域。注意:是'a'邻居'b'它也应该是另一种方式。
答案 1 :(得分:1)
我使用了数组,但不幸的是,只有一个错过的东西是邻居数组的大小将固定为每个区域,这在我们的现实生活中是不合适的。 例如,如果区域A具有两个邻居,则其他区域不必具有相同数量的邻居。那么在这种情况下我该怎么办?
除此之外,在输入第一个区域的邻居后,我在编译代码时出错。
这是我的代码:
import java.io.*;
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
System.out.println("Please enter the number of neighbours");
Scanner kb = new Scanner(System.in);
BufferedReader reader = new BufferedReader(
new InputStreamReader(System.in));
try {
int size = Integer.parseInt(reader.readLine());
//SIZE is size of the neighbours array
String[][] regions = new String[5][size];
for (int i = 0; i < 5; i++) {
System.out.println("Please enter the region #"
+ (i + 1) + ": ");
String input = reader.readLine();
regions[i][0] = input; //get input for region;
for (int j = 1; j <= size; j++) {
System.out.println("Please enter the neighbour #"
+ (j) + ": ");
String n = reader.readLine();
regions[i][j] = n; //get input for neighbours
}
}
} catch (IOException ioe) {
System.out.println("An error have occured");
}
}
}
答案 2 :(得分:1)
例如,如果区域A有两个邻居,则其他区域没有必要具有相同数量的邻居。那么在这种情况下我该怎么办?
我建议使用一个建议的Collection
解决方案,但目标可能是了解multi-dimensional arrays。您可以为每个邻居数组设置不同的大小,但是您必须确定外部循环中每行的大小,如下所示。
import java.util.Arrays;
import java.util.Scanner;
public class Test5 {
private static final int REGION_COUNT = 2;
public static void main(String[] args) {
System.out.println("Please enter the number of neighbours; "
+ "enter 'q' to quit.");
Scanner kb = new Scanner(System.in);
String[][] regions = new String[REGION_COUNT][];
for (int r = 0; r < regions.length; r++) {
System.out.print("How many heighbors 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 (String[] neighbors : regions) {
System.out.println(Arrays.toString(neighbors));
}
}
}
答案 3 :(得分:0)
您可以使用区域和相邻区域的数组创建类或结构。因此您可以轻松访问该区域。
干杯, Dwarak
答案 4 :(得分:0)
使用Map和Collection的组合(例如Set:
)会更容易Map<String, Set<String>> map = new HashMap<String, Set<String>>();
map.put("some region", new HashSet<String>());
map.get("some region").add("some neighbor");
map.get("some region").add("some other neighbor)";
System.out.println("some region's neighbors:");
for(String neighbor : map.get("some region")) {
System.out.println(neighbor);
}