【发布时间】:2019-07-27 12:46:30
【问题描述】:
所以我有一个项目,我需要创建一个包含所有 50 个州的数组列表。然后我必须允许用户输入两个不同的字母。然后我必须删除所有以这些字母开头的状态以及介于两者之间的所有状态。例如。如果有人输入了“D-I”,所有以 D-I 开头的状态都应该被删除。
到目前为止,我已经提出了这个程序,但是当我运行它时,它不仅会删除我输入的字母范围内的所有状态,而且还会删除第一个字母之前的所有状态。例如。如果我输入“D-I”,所有以 A-I 开头的状态都将被删除,而应该是所有以 D-I 开头的状态。
有人可以帮我解决这个问题吗?
import java.util.ArrayList;
import java.util.Scanner;
public class States {
public static void main(String[] args) {
String removeStates;
String firstInitial;
String secondInitial;
String stateInitial;
int first = 0;
int last = 0;
Scanner input = new Scanner(System.in);
ArrayList<String> states = new ArrayList<>();
states.add("Alabama");
states.add("Alaska");
states.add("Arizona");
states.add("Arkansas");
states.add("California");
states.add("Colorado");
states.add("Connecticut");
states.add("Delaware");
states.add("District of Columbia");
states.add("Florida");
states.add("Georgia");
states.add("Hawaii");
states.add("Idaho");
states.add("Illinois");
states.add("Indiana");
states.add("Iowa");
states.add("Kansas");
states.add("Kentucky");
states.add("Louisiana");
states.add("Maine");
states.add("Maryland");
states.add("Massachusetts");
states.add("Michigan");
states.add("Minnesota");
states.add("Mississippi");
states.add("Missouri");
states.add("Montana");
states.add("Nebraska");
states.add("Nevada");
states.add("New Hampshire");
states.add("New Jersey");
states.add("New Mexico");
states.add("New York");
states.add("North Carolina");
states.add("North Dakota");
states.add("Ohio");
states.add("Oklahoma");
states.add("Oregon");
states.add("Pennsylvania");
states.add("Rhode Island");
states.add("South Carolina");
states.add("South Dakota");
states.add("Tennessee");
states.add("Texas");
states.add("Utah");
states.add("Vermont");
states.add("Virginia");
states.add("Washington");
states.add("West Virginia");
states.add("Wisconsin");
states.add("Wyoming");
System.out.println(states.toString());
System.out.print("Enter the range of the states you would like to remove based on the first initials (e.g. A-D [not case sensitive]): ");
removeStates = input.nextLine();
firstInitial = removeStates.substring(0, 1);
secondInitial = removeStates.substring(2);
for (int i = 0; i < states.size(); i++) {
stateInitial = states.get(i).substring(0, 1);
if (stateInitial.equalsIgnoreCase(firstInitial) || stateInitial.equalsIgnoreCase(secondInitial)) {
for (int j = i+1; j>0; j--){
states.remove(i);
i--;
}
}
}
System.out.println(states.toString());
}
}
这是我的输出现在的样子。底部/第三行是问题所在。如您所见,当我输入“G-K”时(顺便说一句,这不区分大小写),它删除了所有以 A-K 开头的状态,而不是那些以 G-K 开头的状态
[Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, District of Columbia, Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina, South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia, Wisconsin, Wyoming]
Enter the range of the states you would like to remove based on the first initials (e.g. A-D [not case sensitive]): g-k
[Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina, South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia, Wisconsin, Wyoming]
【问题讨论】:
-
String#startsWith?
标签: java string object arraylist