2014-09-23 12 views
0

我需要一个Java程序,要求三个跑步者的名字和时间,几分钟内,他们完成了一场比赛。以他们完成的顺序显示跑步者的名字。Java多个输入,并按顺序排列

 String name1=" ", name2= " ", name3=" "; 
    String fast= " ", mid= " ", slow= " "; 
    double faster=0, middle=0, slower=0; 
    double time1 =0, time2=0, time3=0; 

    Scanner kb = new Scanner(System.in); 


     System.out.println("Enter the name of the runner: "); 
     name1 = kb.nextLine(); 
     System.out.println("Enter the time of the runner "+ 
        "took to finish the race (minutes): "); 
     time1 = kb.nextDouble(); 

     System.out.println("Enter the name of the runner: "); 
     name2 = kb.nextLine(); 

     System.out.println("Enter the time of the runner "+ 
        "took to finish the race (minutes): "); 
     time2 = kb.nextDouble(); 

     System.out.println("Enter the name of the runner: "); 
     name3 = kb.nextLine(); 

     System.out.println("Enter the time of the runner "+ 
        "took to finish the race (minutes): "); 
     time3 = kb.nextDouble(); 





    if (time1 < time2 && time1< time3) 
    { 
     time1= faster; 
     name1 = fast; 
     if (time2<time3) 
     { 
      time2=middle; 
      name2=mid; 
      time3=slower; 
      name3=slow; 
     } 
     else 
     { 
      time2 = slower; 
      name2=slow; 
      time3= middle; 
      name3 = mid; 
     } 
    } 
     if (time2 < time3 && time2< time1) 
    { 
     time2= faster; 
     name2 = fast; 
     if (time1<time3) 
     { 
      time1=middle; 
      name1=mid; 
      time3=slower; 
      name3=slow; 
     } 
     else 
     { 
      time1 = slower; 
      name1=slow; 
      time3= middle; 
      name3 = mid; 
     } 
    } 
     if (time3 < time2 && time3< time1) 
    { 
     time3= faster; 
     name3 = fast; 
     if (time2<time1) 
     { 
      time2=middle; 
      name2=mid; 
      time1=slower; 
      name1=slow; 
     } 
     else 
     { 
      time2 = slower; 
      name2=slow; 
      time1= middle; 
      name1 = mid; 
     } 
    } 

     System.out.printf("\n%10s",fast); 
     System.out.println("\n%10s",mid); 
     System.out.println("\n%10s",slow); 

     System.exit(0); 

到目前为止,这是我所有的,但我知道我做错了,可以帮助我吗?

+2

您的预期产出是多少?您的实际产出是多少? – Compass 2014-09-23 20:51:38

+0

@Compass我必须输出三个赛跑者的名字,以便首先完成比赛。 – 2014-09-25 06:33:24

回答

0

我可以看到直线上升的问题是使用kb.nextDouble();

那是因为扫描仪#nextDouble方法不读你输入的最后一个换行符,因此该换行到扫描仪#nextLine在下次调用消耗

 System.out.println("Enter the name of the runner: "); 
    name1 = kb.nextLine(); 
    System.out.println("Enter the time of the runner "+ 
       "took to finish the race (minutes): "); 
    time1 = kb.nextDouble(); 

    System.out.println("Enter the name of the runner: "); 
    name2 = kb.nextLine(); 

    System.out.println("Enter the time of the runner "+ 
       "took to finish the race (minutes): "); 
    time2 = kb.nextDouble(); 

    System.out.println("Enter the name of the runner: "); 
    name3 = kb.nextLine(); 

    System.out.println("Enter the time of the runner "+ 
       "took to finish the race (minutes): "); 
    time3 = kb.nextDouble(); 

将其更改为

 System.out.println("Enter the name of the runner: "); 
    name1 = kb.nextLine(); 
    System.out.println("Enter the time of the runner "+ 
       "took to finish the race (minutes): "); 
    time1 = Double.parseDouble(kb.nextLine()); 

    System.out.println("Enter the name of the runner: "); 
    name2 = kb.nextLine(); 

    System.out.println("Enter the time of the runner "+ 
       "took to finish the race (minutes): "); 
    time2 = Double.parseDouble(kb.nextLine()); 

    System.out.println("Enter the name of the runner: "); 
    name3 = kb.nextLine(); 

    System.out.println("Enter the time of the runner "+ 
       "took to finish the race (minutes): "); 
    time3 = Double.parseDouble(kb.nextLine()); 

后你解决这个问题看jan-groth提出DESIG n解决方案。

+0

是一个笑话的答案?这不是解决OP代码问题的核心...... – 2014-09-23 20:58:52

+0

@jangroth在你成为一个笑话之前,明白输入部分对他不起作用,然后请他转到数据结构......以及围绕设计的其他问题 – StackFlowed 2014-09-23 21:01:04

+0

我想那么我们不同意关于给定的代码是什么问题:) – 2014-09-23 21:02:59

0

你需要的是一个更好的数据结构:

  • 用于保存
  • 把所有这些对象为集合名称和时间的跑步者创建一个对象,一个列表可能是一个良好的开端
  • 通过循环排序的跑步者名单打印出姓名和时间

随时向SOF提出更多问题。