public class Yearly {
public void getYearlyData() throws FileNotFoundException {
String[] state = StatesList.getValues();
int numberOfStates = state.length;
我有一个数组:String[] state
,其中包含用户指定的状态名称。
它可能看起来像这样:String[] state = {"Illinois", "Kansas", "Wyoming"};
下面是二维锯齿状数组。每个元素的第一个子元素是州的名称,然后是该州报纸的名称。
String statePapersInitial[][] = {
{ "Alabama", "BGNB"},
{ "Alaska", "ADNB", "ALKP"},
{ "Arizona", "ADSB" },
..................//Total = 51.................
{ "Wyoming","WTEB", "WYOM", "WMPP"};
目标是创建一个新的交错数组,该数组仅包含 statePapersInitial
数组中包含用户在 state
中选择的州名称的元素> 数组。
我将新数组命名为statePapers
我尝试过以下方法:
String[][] statePapers = null;
int x = 0;
for (x = 0; x < state.length; x++)
{
int i = 0;
for (i = 0; i < statePapersInitial.length; i++)
{
if (state[x].equals(statePapersInitial[i][0]))
{
int j = 1;
for (j = 1; j < statePapersInitial[i].length; j++)
statePapers[x][j-1] = statePapersInitial[i][j];
System.out.println(statePapers[x][j-1]);
}
else;
}
}
但是,它不起作用,它在线程“main”中抛出异常
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;
}
}
输出是:
Alabama BGNB
Wyoming WTEB WYOM WMPP
现在使用 Map
的方法可能看起来像这样:
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
在这里您可以看到它忽略了 "NOT A STATE"
已传递,并且它使用州名称作为键,而不是数组中的第一个元素。
关于java - 如何在给定其他数组的情况下创建新的锯齿状数组?有没有一种方法可以从数组中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14968543/