我对我的项目有麻烦,因为我不能得到正确的开始,这是读取由用户的空格分隔的一行整数,并将值放入数组中。
System.out.println("Enter the elements separated by spaces: ");
String input = sc.next();
StringTokenizer strToken = new StringTokenizer(input);
int count = strToken.countTokens();
//Reads in the numbers to the array
System.out.println("Count: " + count);
int[] arr = new int[count];
for(int x = 0;x < count;x++){
arr[x] = Integer.parseInt((String)strToken.nextElement());
}
这就是我所拥有的,它似乎只读取数组中的第一个元素,因为当count初始化时,由于某种原因,它被设置为1。
有人能帮我吗?换一种方式做会不会更好?
只需要做一个微小的更改就可以使您的代码工作。错误在这一行:
String input = sc.next();
正如我在问题下的评论中指出的那样,它只读取输入的下一个令牌。参考文档
如果用
代替String input = sc.nextLine();
它会做你想让它做的事情,因为nextLine()
消耗了整行输入。
String integers = "54 65 74";
List<Integer> list = new ArrayList<Integer>();
for (String s : integers.split("\s"))
{
list.add(Integer.parseInt(s));
}
list.toArray();
这是一种更简单的方法-
System.out.println("Enter the elements seperated by spaces: ");
String input = sc.nextLine();
String[] split = input.split("\s+");
int[] desiredOP = new int[split.length];
int i=0;
for (String string : split) {
desiredOP[i++] = Integer.parseInt(string);
}
有其他方法可以达到相同的效果。但是当我尝试你的代码时,它似乎工作正常。
StringTokenizer strToken = new StringTokenizer("a b c");
int count = strToken.countTokens();
System.out.println(count);
将计数打印为3。默认为" "
我不知道你怎么得到你的输入字段。可能是它没有以字符串格式返回完整的输入。
我认为你正在使用java.util.Scanner来读取你的输入
java doc from scanner.
Scanner使用分隔符模式将其输入分解为多个令牌,默认情况下匹配空格。生成的令牌可能是使用各种next转换成不同类型的值方法。
因此输入只返回一个整数,其余的都不处理
读这个。扫描器#next(),你应该用扫描器#nextLine()来代替
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
.
.
.
StringTokenizer st = new StringTokenizer(br.readLine());
int K = Integer.parseInt(st.nextToken());
int N= Integer.parseInt(st.nextToken());