循环跳过一些陈述

时间:2013-11-25 08:30:41

标签: java loops methods

我已经编写了这段代码,让clink识别他们的记录

public static void main (String args[]){//Start main
   String [] name = new String [5];
   int [] age = new int [5];
   char [] test = new char [5];
   addPatients( name , age , test );
}

public static void addPatients ( String[] n ,int[] a ,char[] t ){
   i=0;
   while (i<n.length )
   {
      System.out.println("Enter Patient’s Name: ");
      n[i] = scan.nextLine();

      System.out.println("Enter Patient’s Age: ");
      a[i]=scan.nextInt();

      System.out.println("Enter Patient’s Medical test: ");
      t[i]=scan.next().charAt(0);
      i++;
  }

  System.out.println("Enter the patient’s index to find his/her information : ");
  int index= scan.nextInt();
  System.out.println ("Patient name : " + n[index] +"\n Patient age : " + a[index] +"\n Patient    Medical test: " + t[index]);
}

但问题出在addPatients,当方法开始工作时,它只读取第一个语句

 System.out.println("Enter Patient’s Name: ");
 n[i] = scan.nextLine(); 
用户一次

并在第二次循环中跳过它!

4 个答案:

答案 0 :(得分:0)

请勿在nextLine之后使用nextInt,因为nextInt不会消耗\n,而nextLine会消耗nextLine跳过“你的实际输入。

一种解决方案是在nextInt之后添加额外的\n以“吞下”未通过nextInt读取的int

现在代码中发生的事情是,当您要求\n输入时,用户输入例如12并按Enter(int),n[i] = scan.nextLine();值将是阅读,但是当您再次到达\n时,{{1}}正在等待阅读..它会被阅读,所以您会认为它已被跳过。

答案 1 :(得分:0)

问题在于,当您编写scan.next()来阅读患者的医学检查时,构成下一个单词的字符会从扫描仪中拉出,但换行符或其后跟随它们的其他空格则不会。

例如,如果用户键入了P A S S然后按Enter键,则会从扫描仪中读取字母P A S和S,但换行符仍保留在扫描仪上 - 它将是下一个字符读取。然后,在循环的第二次迭代中,对scan.nextLine()的以下调用只是读取剩余的换行符,而不是读取第二个患者的名字。

在那之后,一切都没有了。扫描仪有几个尚未读过的字符,但应该是。

解决方法是在scan.nextLine()之后添加额外的t[i]=scan.next().charAt(0);,以便从扫描仪中提取额外的换行符。

答案 2 :(得分:0)

  System.out.println("Enter Patient’s Name: ");
  n[i] = scan.nextLine();

  System.out.println("Enter Patient’s Age: ");
  a[i]=scan.nextInt();

  System.out.println("Enter Patient’s Medical test: ");
  t[i]=scan.next().charAt(0);
  i++;

在上面的代码中,首先输入一个名称,然后按Enter键。名称将存储在n [i]中,但换行符(enter)仍然作为输入等待读取。在你的年龄问题中,你正在等一个整数,它跳过新行(可以是任意数量的新行)并等待你输入的下一个整数。测试结果的下一个问题是等待下一个标记。 next()方法忽略所有新行字符和空格,直到它可以获取完整的标记。在此处输入值并按Enter键。现在这个输入被你的名字问题读作第二次循环中的输入,因为nextLine()不会忽略换行符。因此,您可以通过在每个循环后获取它来忽略在第三个问题之后命中的换行符。或者使用next()代替newLine()。通过使用next(),您只能输入1个单词。

答案 3 :(得分:0)

我很欣赏到目前为止给出的很好的解释..... 因此,纠正此问题的最终修改代码就在这里......

 public static void addPatients ( String[] n ,int[] a ,char[] t )

 {

    final Scanner scanner = new Scanner(System.in);
    int i=0;
    while (i<n.length )
    {
        System.out.println("Enter Patient’s Name: ");
        n[i] = scanner.nextLine();

        System.out.println("Enter Patient’s Age: ");
        a[i]=scanner.nextInt();

        System.out.println("Enter Patient’s Medical test: ");
        t[i]=scanner.next().charAt(0);
        i++;
        scanner.nextLine(); // To swallow the extra excess newline(enter) character.
    }
    System.out.println("Enter the patient’s index to find his/her information : ");
    final int index= scanner.nextInt();
    System.out.println ("Patient name : " + n[index] +"\n Patient age : " + a[index] +"\n Patient    Medical test: " + t[index]);
}