我正在学习Java学习书,目前我正在学习数组和向量。直到现在我一直都很好,多年来我一直坚持这个问题而且不知道如何解决这个问题,我的脑袋即将爆炸!
我必须解决的这个特定计划的问题是:
它会接受
的输入退出方案与以前一样,第二种方案将学生及其标记存储在下一个方案中
可用数组索引;而只是返回任何匹配名称的学生的标记(那里
可能不止一个这样的学生,很多都没有。)
java代码如下:
import java.util.Scanner;
public class ArrayInput {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
String b;
String student[] = new String[50];
String mark[] = new String[50];
int i = 0;
while ((b = s.nextLine()) != null) {
if (b.equals("quit")) break;
String Tokens[] = b.split(' ');
// System.out.println(Tokens[0] + ' ' + Tokens[1]);
student[i] = Tokens[0];
mark[i] = Tokens[1];
i++;
}
for (int j = 0; j < i; j++) {
System.out.println(student[j] + ' ' + mark[j]);
}
}
}
它也会在这一行上抛出错误:
String Tokens[] = b.split(' ');
答案 0 :(得分:1)
使用:
b.split("\\s+");
分割空格。 这将导致任意数量的连续空格将您的字符串拆分为标记,因为java中的split()方法构造为与正则表达式一起使用
答案 1 :(得分:0)
我会像这样写的(在IDEONE上试过):
import java.util.Scanner;
public class ArrayInput {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
String b;
String[] student = new String[50]; // changed here
String[] mark = new String[50]; // Changed here
int i = 0;
b = s.nextLine(); // Get the next line here first
while (b != null) { // Evalaute b as for while loop here
if (b.equals("quit")) break;
String[] Tokens = b.split(" "); // Changed to use " ", not ' '
// System.out.println(Tokens[0] + ' ' + Tokens[1]);
student[i] = Tokens[0];
mark[i] = Tokens[1];
i++;
b = s.nextLine(); // get the next line here before looping again.
}
for (int j = 0; j < i; j++) {
System.out.println(student[j] + ' ' + mark[j]);
}
}
}
Scanner
类有一个名为hasNext()
的方法,您可以非常有用地使用while()
循环。如果您使用以下代码段,则会改进:
// b = s.nextLine() not needed anymore
while(s.hasNext()){
...
...
...
}