打印二维阵列

时间:2010-12-30 14:15:45

标签: java

我正在开展一项小任务,允许用户输入任何国家/地区的区域并将其存储在一个阵列中。此外,每次他进入一个地区,系统都会要求他进入该输入地区的邻居并存储这些邻居。

我完成了整个任务,但我遇到了两个小问题:

  1. 当我运行代码时,程序不会要求我输入第一个区域的名称        (这只发生在第一个地区)
  2. 我无法打印每个区域及其邻居,如下所示:        A区:neighbour1 neighbour2        B区:neighbour1 neighbour2 等等。
  3. 我的代码如下:

    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,

    我使用了你的程序,它给了我以下内容:

    alt text

2 个答案:

答案 0 :(得分:1)

  1. 当我运行代码时,程序 不要求我输入名字 第一个地区(发生这种情况 只到第一个地区)
  2. 因为您正在使用nextLine,所以程序会为nextLine的第一次编辑使用next而不是nextline

    1. 无法打印每个地区和 它的邻居如下 格式:区域A:neighbour1 neighbour2地区B:neighbour1 neighbour2等等。
    2. 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);
    }
}