这是某公司的一个面试题,关于求平均数的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
第三个问题,由于开始没用到正则表达式,直接用的字符串转数字,导致代码有漏洞
第四个问题,由于是菜鸟的缘故,逻辑有的还理不清,这些都是测试的时候发现的,
第五个问题,希望有缘人看了,写出来简单的发给我,不胜感激
* 求平均成绩,要求输入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
第三个问题,由于开始没用到正则表达式,直接用的字符串转数字,导致代码有漏洞
第四个问题,由于是菜鸟的缘故,逻辑有的还理不清,这些都是测试的时候发现的,
第五个问题,希望有缘人看了,写出来简单的发给我,不胜感激
相关文章推荐
- 一个关于if else容易迷惑的问题
- 一道sql面试题附答案
- C# 超高面试题收集整理
- 人人网javascript面试题 可以提前实现下
- PHP中设置一个严格30分钟过期Session面试题的4种答案
- 据说是雅虎的一份PHP面试题附答案
- php牛逼的面试题分享
- 一套比较完整的javascript面试题(部分答案)
- 10个经典的Java main方法面试题
- 小米公司JavaScript面试题
- 超级全面的PHP面试题整理集合第1/2页
- 极易被忽视的javascript面试题七问七答
- 5个实用的shell脚本面试题和答案
- PHP经典面试题集锦
- 8个PHP数组面试题
- PHP中提问频率最高的11个面试题和答案
- 用PHP解决的一个栈的面试题
- Android工程师面试题大全
- PHP面试题之文件目录操作
- 几道坑人的PHP面试题 试试看看你会不会也中招