我正在尝试从用户那里获取输入,然后将该输入排序为数组。输入必须是int,double或string。我现在所拥有的只是一个循环,要求输入用户。
如何阅读/识别输入并将其存储到正确的ArrayList
?
到目前为止我所拥有的:
import java.util.ArrayList;
import java.util.Scanner;
public class userInput {
public static void main(String [] args){
ArrayList<String> randomTextlist = new ArrayList<String>();
ArrayList<Double> doublelist = new ArrayList<Double>();
ArrayList<Integer> intlist = new ArrayList<Integer>();
boolean input = true;
Scanner scan = new Scanner(System.in);
while (input){
System.out.print("Input string, int, or double.");
intlist.add(scan.next());
}
我是朝着正确的方向前进吗?如果是这样,你如何建议确保将输入放入正确的ArrayLists中?
答案 0 :(得分:3)
这将继续收集,直到您键入“q”,然后在每个ArrayList
中打印所有结果。您可以从那里进行修改以满足您的需求。
while (input) {
System.out.println("Input string, int, or double:");
if(scan.hasNextInt()) {
intlist.add(scan.nextInt());
} else if(scan.hasNextDouble()) {
doublelist.add(scan.nextDouble());
} else {
String str = scan.next();
if(str.equals("q"))
break;
randomTextlist.add(str);
}
}
// sort the lists
Collections.sort(intlist);
Collections.sort(doublelist);
Collections.sort(randomTextlist);
// print the lists
System.out.println(intlist);
System.out.println(doublelist);
System.out.println(randomTextlist);
答案 1 :(得分:2)
试试这个:
public static void main(String [] args){
ArrayList<String> randomTextlist = new ArrayList<String>();
ArrayList<Double> doublelist = new ArrayList<Double>();
ArrayList<Integer> intlist = new ArrayList<Integer>();
boolean input = true;
Scanner scan = new Scanner(System.in);
while (input){
System.out.print("Input string, int, or double.");
//exit loop case: input false, or how would you exit the loop?
if (scan.hasNextBoolean()){
break;
}
if (scan.hasNextDouble()){
doublelist.add(scan.nextDouble());
}
else if (scan.hasNextInt()){
intlist.add(scan.nextInt());
}
else{
randomTextlist.add(scan.next());
}
}
Collections.sort(doublelist);
System.out.println(doublelist);
Collections.sort(intlist);
System.out.println(intlist);
Collections.sort(randomTextlist);
System.out.println(randomTextlist);
}
答案 2 :(得分:2)
像245这样的数字是整数,也是双数,所以你必须将它添加到intList
和doubleList
但是像235.35这样的数字只有两倍,所以你必须只将它加到{{ 1}}
其他输入(不是完全数字输入)不是int或double,因此您必须将它们添加到doubleList
现在我们如何检测输入是哪一个?
使用randomTextlist
语句很简单。如何?
首先检查输入是否为try/catch
?如果它确实是Integer
,当您尝试解析它时,它会抛出Integer
,以便您可以检测到输入不是NumberFormatException
。
在Integer
声明中,您必须检查输入是否为catch
,如果输入为Double
。如上所述,它会抛出NumberFormatException
因此输入不是Double
,现在我们确定它属于randomTextlist
但是如果是Integer
,你必须将它添加到int和double列表中,
等等
现在观看这段代码,以便你了解我试图告诉你的内容!
while (input) {
String next = scan.next();
try {
/*
check if input is integer or not,
if it not , it throws NumberFormatException
*/
int n = Integer.parseInt(next);
// if input was integer it does'nt throw any exception
// so add input to your lists
intlist.add(n);
doublelist.add(new Double(n));
} catch (NumberFormatException e) {
try {
/*
check if input is double or not,
if it not , it throws NumberFormatException
*/
double n = Double.parseDouble(next);
// like above there is no exception so input is double
// and we add it to doublelist
doublelist.add(n);
} catch (NumberFormatException ex) {
// after two NumberFormatExceptions we are sure that
// input isn't integer or double so add it to randomTextlist
randomTextlist.add(next);
}
}
}
答案 3 :(得分:1)
首先,您需要弄清楚您拥有的数据类型。
首先尝试解析为Integer,然后作为Double解析,如果其他所有失败则默认为String。未经测试的例子:
String scannedValue = scan.next();
try {
intlist.add(Integer.parseInt(scannedValue));
} catch (NumberFormatException e1) {
try {
doublelist.add(Double.parseDouble(scannedValue));
} catch (NumberFormatException e2) {
randomTextlist.add(scannedValue);
}
}
现在为排序列表的东西。目前,您只是将值添加到列表中。
由于Integer
,Double
和String
都实施Comparable
,您可以使用sort
上的Collections
方法对列表进行排序:
Collections.sort(randomTextlist);
Collections.sort(doublelist);
Collections.sort(intlist);