Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在给定其他数组的情况下创建新的锯齿数组?是否有从数组中删除元素的方法?_Java_Jagged Arrays - Fatal编程技术网

Java 如何在给定其他数组的情况下创建新的锯齿数组?是否有从数组中删除元素的方法?

Java 如何在给定其他数组的情况下创建新的锯齿数组?是否有从数组中删除元素的方法?,java,jagged-arrays,Java,Jagged Arrays,我有一个数组:String[]state,它包含用户指定的状态名称 它可能是这样的:String[]state={“伊利诺伊州”、“堪萨斯州”、“怀俄明州”} 以下是二维锯齿阵列。每个元素的第一个子元素是状态的名称,然后是处于该状态的报纸的名称 public class Yearly { public void getYearlyData() throws FileNotFoundException { String[] state = StatesList.ge

我有一个数组:
String[]state
,它包含用户指定的状态名称

它可能是这样的:
String[]state={“伊利诺伊州”、“堪萨斯州”、“怀俄明州”}

以下是二维锯齿阵列。每个元素的第一个子元素是状态的名称,然后是处于该状态的报纸的名称

public class Yearly { 

    public void getYearlyData() throws FileNotFoundException  {

        String[] state = StatesList.getValues();
        int numberOfStates = state.length;
我们的目标是创建一个新的锯齿状数组,该数组将只包含
statepapersini
数组中包含用户在
state
数组中选择的状态名称的元素

我调用了新数组
statePapers

我尝试了以下方法:

String statePapersInitial[][] = {
                { "Alabama", "BGNB"},
                { "Alaska", "ADNB", "ALKP"},
                { "Arizona", "ADSB" },
                ..................//Total = 51.................
                { "Wyoming","WTEB", "WYOM", "WMPP"};
仅使用阵列:

java.lang.NullPointerException
at Yearly.getYearlyData(Yearly.java:95)
at Main.main(Main.java:9)
输出为:

public class q14968543 {
  public static void main(String[] args) {
    String statePapersInitial[][] = {
      { "Alabama", "BGNB" },
      { "Alaska",  "ADNB", "ALKP" },
      { "Arizona", "ADSB" },
      { "Wyoming", "WTEB", "WYOM", "WMPP" }
    };

    for(String[] papers : selectOnly(statePapersInitial, "Alabama", "Wyoming")) {
      for(String paper : papers) {
        System.out.print(paper+ " ");
      }
      System.out.println();
    }
  }

  private static String[][] selectOnly(String[][] statePapers, String ... states) {
    String[][] selected = new String[states.length][0];
    int index = 0;
    for(String state : states) {
      for(String[] papers : statePapers) {
        if(state.equals(papers[0])) {
          selected[index++] = papers;
        }
      }
    }
    return selected;
  }
}
现在,使用
Map
s的方法可能如下所示:

Alabama BGNB 
Wyoming WTEB WYOM WMPP 

在这里,您可以看到它正在忽略传递的
“nota STATE”
,并且它使用状态名作为键,而不是数组中的第一个元素。

statePapers为null,因为您从未创建过它。这似乎是
映射忘记数组的完美应用程序。你应该用地图。关于您的异常消息:您需要在使用数组之前初始化它们。您的代码将状态文件设置为null,并且从不初始化它。或者多映射!这是个好主意,我来看看多重地图。你是对的,我给州报分配了空值。。。无论如何,我认为Multimap会做得更好。感谢guysOne,这段代码的一个问题是,如果要选择的状态存在于原始数组中,则不会出现错误检查(副作用是返回数组大于要返回的数据),但这应该可以让您开始。但是,正确的数据类型应该是cleanerHi@Jason Sperske。我可以再问你一个问题吗。如何(而不是将其打印到控制台)将这些值分配给一个新字符串,以便:字符串[][]myNewString={{{“Alabama”、“BGNB”}、{“Wyoming”、“WTEB”、“WYOM”、“WMPP”};这应该有效:
String[][]myNewString=selectOnly(statepapersini,“阿拉巴马州”、“怀俄明州”)这是我最初的答案,但我认为我很聪明,只是将其转储到for循环中:P@Buras我在回答中加入了地图法
Alabama BGNB 
Wyoming WTEB WYOM WMPP 
import java.util.*;
public class q14968543 {
  public static void main(String[] args) {
    Map<String, List<String>> statePapers = new HashMap<>();
    statePapers.put("Alabama", Arrays.asList((new String[] {"BGNB"})));
    statePapers.put("Alaska",  Arrays.asList((new String[] {"ADNB", "ALKP"})));
    statePapers.put("Arizona", Arrays.asList((new String[] {"ADSB"})));
    statePapers.put("Wyoming", Arrays.asList((new String[] {"WTEB", "WYOM", "WMPP"})));

    for(Map.Entry<String, List<String>> state : selectOnly(statePapers, "Alabama", "NOT A STATE", "Wyoming").entrySet()) {
      System.out.print(state.getKey()+"=");
      for(String paper : state.getValue()) {
        System.out.print(paper+ " ");
      }
      System.out.println();
    }
  }
  private static Map<String, List<String>> selectOnly(Map<String, List<String>> statePapers, String ... states) {
    Map<String, List<String>> selected = new HashMap<>();
    for(String state : states) {
      if(statePapers.containsKey(state)) {
        selected.put(state, statePapers.get(state));
      }
    }
    return selected;
  }
}
Wyoming=WTEB WYOM WMPP 
Alabama=BGNB