您的位置:首页 > 职场人生

这是某公司的一个面试题,关于求平均数的java程序,

2016-05-26 22:13 399 查看
/**
* 求平均成绩,要求输入0-100的成绩,如果不到5个,按5个计算平均成绩,如果超过5个按前5个计算,
* 是不是很简单?
*/
package progPractice;

import java.util.Scanner;

class PracticeHuaWei {

public static void main(String[] args) {
double averge = getAverge();
System.out.println(averge);
}

/**
* 将求平均成绩的过程抽取成一个方法,名为getAverge
*/
private static double getAverge(){
Scanner sc = new Scanner(System.in);
String[] arr = new String[20];
int sum = 0 ;
System.out.println("请输入5个成绩,按#结束");
outerLoop:
for (int i = 0; i < arr.length; i++) {
String s = sc.nextLine() ;
if(s.equals("#")){
arr[i] = "#" ;
break ;
}
if(s.equals("100")){
arr[i] = "100" ;
}else if(!(s.matches("\\d{1,2}"))){
while(true){
System.out.println("成绩非法,请重新输入");
s = sc.nextLine();
if(s.equals("#")){
arr[i] = "#" ;
break outerLoop ;
}
if(s.matches("\\d{1,2}")){
arr[i] = s ;
break ;
}
if(s.equals("100")){
arr[i] = "100" ;
break ;
}
}
}
if(s.matches("\\d{1,2}")){
arr[i] = s ;
}
}
for (int i = 0; i < 5; i++) {
if(arr[0] == "#"){
return 0 ;
}
if(!(arr[i].equals("#"))){
sum = sum + Integer.parseInt(arr[i]);
}
}
return sum / 5.0 ;
}
}



这道题比较简单,但是由于我是菜鸟的缘故,写的时间比较长,

第一个问题, 字符串==和equals方法,不完全一样,当然对于字符串常量来说这两个一样,因为常量优化机制,如果对于字符串引用即变量,== 则比较地址值,由于开始写的==,导致在这里耗了一个小时,console一直提示,numberFormatException

第二个问题,开始没想到正则表达式,因为这里要判断输入的是否是0至100的数字,所以应该用正则表达式判断是否是两位数,其次100也是三位数,然而大于100的也是三位数,所以考虑先验证是否是100

第三个问题,由于开始没用到正则表达式,直接用的字符串转数字,导致代码有漏洞

第四个问题,由于是菜鸟的缘故,逻辑有的还理不清,这些都是测试的时候发现的,

第五个问题,希望有缘人看了,写出来简单的发给我,不胜感激
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JavaSe 面试题 编程题