Java数组操作和错误修正

时间:2015-03-18 19:38:21

标签: java arrays input

我正在学习Java学习书,目前我正在学习数组和向量。直到现在我一直都很好,多年来我一直坚持这个问题而且不知道如何解决这个问题,我的脑袋即将爆炸!

我必须解决的这个特定计划的问题是:

  1. 引入了基本错误检查,具体检查阵列令牌有两个元素,如果数据格式有问题通知用户但继续接受输入。
  2. 它会接受

    的输入
    • 退出
    • 放置名称标记
    • 获取姓名

    退出方案与以前一样,第二种方案将学生及其标记存储在下一个方案中 可用数组索引;而只是返回任何匹配名称的学生的标记(那里 可能不止一个这样的学生,很多都没有。)

  3. 程序将标记读入整数而不是字符串(您可以找到结构示例) 需要在Google上搜索Integer.parseInt。)

  4. 输入quit后,还会显示平均标记和最高标记。
  5. 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(' ');
    

2 个答案:

答案 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()){
...
...
...
 }