6

我的项目有问题,因为我无法正确开始,即从用户读取一行由空格分隔的整数并将值放入数组中。

    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。

谁能帮我?以不同的方式执行此操作会更好吗?

4

5 回答 5

14

只需进行微小的更改即可使您的代码正常工作。错误在这一行:

String input = sc.next();

正如我在问题下的评论中指出的那样,它只读取下一个输入标记。请参阅文档

如果您将其替换为

String input = sc.nextLine();

它会做你想做的事,因为nextLine()会消耗整行输入。

于 2013-01-15T08:37:43.863 回答
4
String integers = "54 65 74";
List<Integer> list = new ArrayList<Integer>();
for (String s : integers.split("\\s"))  
{  
   list.add(Integer.parseInt(s));  
}
list.toArray();
于 2013-01-15T08:28:34.117 回答
2

有其他方法可以实现相同的目标。但是当我尝试你的代码时,它似乎工作正常。

StringTokenizer strToken = new StringTokenizer("a b c");
int count = strToken.countTokens();
System.out.println(count);

它打印计数为 3。默认分隔符为“”

我不知道你是如何得到你的输入字段的。可能是它没有以字符串格式返回完整的输入。

我认为您正在使用 java.util.Scanner 来读取您的输入

来自扫描仪的 java 文档。

Scanner 使用分隔符模式将其输入分解为标记,默认情况下匹配空格。然后可以使用各种 next 方法将生成的标记转换为不同类型的值。

因此输入只返回一个整数,其余的无人看管

读这个。Scanner#next(),你应该使用Scanner#nextLine()代替

于 2013-01-15T08:30:20.833 回答
2

这将是一种更简单的方法 -

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);
}
于 2013-01-15T08:30:31.650 回答
0
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());
于 2015-08-12T00:12:09.553 回答