鱼C论坛

 找回密码
 立即注册
查看: 3013|回复: 2

[已解决]hasNextLine()求助

[复制链接]
发表于 2021-10-16 22:15:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编写一个计算平均分的抽象类ComputerAverage,类中有一个录入成绩方法input和一个抽象方法求平均分方法average。定义Gymnastics类和School类继承ComputerAverage类。
Gymnastics类中计算选手的平均成绩的方法是去掉一个最低分,去掉一个最高分,然后求平均分。
School中计算平均分的方法是直接是总分除以总科目。
要求:测试类中要定义两个ComputerAverage对象(分别由Gymnastics类、 School类实例化),分别调用averge方法求得平均分。

我的思路:
由于输入的数字个数不确定,想用hasNextLine()如果输入了字符a结束输入,可是运行的时候老是报错。
“类中有一个录入成绩方法input”这个要求是什么意思?不知道怎么实现。
  1. import java.util.Scanner;

  2. public class Demo02 {

  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub
  5.                 Scanner sc=new Scanner(System.in);
  6.                 String str;
  7.                 String []s = null;
  8.                 while(sc.hasNextLine()) {
  9.                         if(s.equals("a")) break;
  10.                         str=sc.nextLine();
  11.                         s=str.split(" ");
  12.                         
  13.                 }
  14.                 for(int i=0;i<s.length;i++) {
  15.                         System.out.println(s[i]);
  16.                 }
  17.                
  18.         }
  19.         

  20. }
复制代码

最佳答案
2021-10-17 09:04:29
就写一个函数
  1. import java.util.Arrays;
  2. import java.util.Scanner;

  3. public class Test2 {
  4.     public static void main(String[] args) {
  5.         // TODO Auto-generated method stub
  6.         String[] s = input();
  7.         
  8.         for(int i = 0; i < s.length; i++)
  9.         {
  10.             System.out.println(s[i]);
  11.         }

  12.     }

  13.     public static String[] input()
  14.     {
  15.         Scanner sc=new Scanner(System.in);
  16.         String str = "";
  17.         String[] str2 = null;


  18.         while(sc.hasNextLine()) {
  19.             str=sc.nextLine();
  20.             str2 = str.split(" ");
  21.             if(str2[str2.length-1].equals("a"))
  22.             {
  23.                 break;
  24.             }

  25.         }
  26.         // 去除数组中最后一个元素
  27.         str2 = Arrays.copyOf(str2,str2.length-1);
  28.         return str2;
  29.     }
  30. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-17 09:04:29 | 显示全部楼层    本楼为最佳答案   
就写一个函数
  1. import java.util.Arrays;
  2. import java.util.Scanner;

  3. public class Test2 {
  4.     public static void main(String[] args) {
  5.         // TODO Auto-generated method stub
  6.         String[] s = input();
  7.         
  8.         for(int i = 0; i < s.length; i++)
  9.         {
  10.             System.out.println(s[i]);
  11.         }

  12.     }

  13.     public static String[] input()
  14.     {
  15.         Scanner sc=new Scanner(System.in);
  16.         String str = "";
  17.         String[] str2 = null;


  18.         while(sc.hasNextLine()) {
  19.             str=sc.nextLine();
  20.             str2 = str.split(" ");
  21.             if(str2[str2.length-1].equals("a"))
  22.             {
  23.                 break;
  24.             }

  25.         }
  26.         // 去除数组中最后一个元素
  27.         str2 = Arrays.copyOf(str2,str2.length-1);
  28.         return str2;
  29.     }
  30. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-17 11:12:42 | 显示全部楼层
  1. package work1016;

  2. import java.util.Arrays;
  3. import java.util.Scanner;

  4. public class Demo02 {

  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 ComputerAverage c1=new School();
  8.                 ComputerAverage c2=new Gymnastics();
  9.                 int []s=c1.input();
  10.                 c1.average(s);
  11.                 c2.average(s);
  12.                
  13.         }
  14. }
  15. abstract class ComputerAverage
  16. {
  17.         //input方法
  18.         public int [] input() {
  19.                 Scanner sc=new Scanner(System.in);
  20.                 String str = null;
  21.                 String []s = null;
  22.                 int i=0;
  23.                 int ave=0;
  24.                 while(sc.hasNext()) {
  25.                        
  26.                         str = sc.nextLine();//读取一行数字赋值给字符串
  27.                         s = str.split(" ");//将字符串以空格为间隔依次存入字符串数组
  28.                         break;
  29.                 }
  30.                 int []s1=new int[s.length];
  31.                 for(i=0;i<s.length;i++) {
  32.                                 s1[i]=Integer.parseInt(s[i]);//将字符串数组转换为整型数组用于计算均值
  33.                         }
  34.         return s1;
  35.         }
  36.         //抽象方法求均值
  37.         public abstract void average(int[] s1);
  38.        
  39. }

  40. class Gymnastics extends ComputerAverage
  41. {

  42.         @Override
  43.         public void average(int[] s1) {
  44.                 // TODO Auto-generated method stub
  45.                 Arrays.sort(s1);//从小到大排序
  46.                 int ave=0;
  47.                 for(int i=1;i<s1.length-1;i++) {
  48.                         ave += s1[i];
  49.                 }
  50.                 ave=ave/(s1.length-2);
  51.                 System.out.println("去掉一个最低分,去掉一个最高分,然后求平均分:"+ave);
  52.         }
  53.        
  54. }

  55. class School extends ComputerAverage
  56. {

  57.         @Override
  58.         public void average(int[] s1) {
  59.                 // TODO Auto-generated method stub
  60.                 int ave=0;
  61.                 for(int i=0;i<s1.length;i++) {
  62.                         ave+=s1[i];
  63.                 }
  64.                 ave=ave/s1.length;
  65.                 System.out.println("总分除以总科目的平均分为:"+ave);
  66.         }
  67.        
  68. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 15:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表