import java.util.Scanner;
public class Score
{
public static void main(String[] args)
{
System.out.println("请输入学生人数:");
Scanner sn = new Scanner(System.in);
int r = sn.nextInt();
double[][] arrScore = new double[r][3];
System.out.println("Number"+"\t"+"Chinese"+"\t"+"Math"+"\t"+"English"+"\t"+"Sum"+"\t"+"Average");
for (int i = 0; i < r; i++)
{
double sumScore = 0;
System.out.println("请依次输入此名同学三门科目的成绩:");
for (int j = 0; j < 3; j++)
{
arrScore[i][j]=sn.nextInt();
sumScore += arrScore[i][j];
}
System.out.print("学生"+(i + 1)+"\t"+ arrScore[i][0] +"\t"+ arrScore[i][1] +"\t"+ arrScore[i][2] +"\t"+ sumScore +"\t");
System.out.println(sumScore / 3);
}
System.out.print("Average"+"\t"+(arrScore[0][0]+arrScore[1][0]+arrScore[2][0]+arrScore[3][0]+arrScore[4][0])/5+"\t");
System.out.print((arrScore[0][1]+arrScore[1][1]+arrScore[2][1]+arrScore[3][1]+arrScore[4][1])/5+"\t");
System.out.print((arrScore[0][2]+arrScore[1][2]+arrScore[2][2]+arrScore[3][2]+arrScore[4][2])/5);
}
}
改写这个程序,添加异常处理机制,使得:如果输入的学生人数不是整数或者不是正数,则进行相应的异常处理,并提示重新输入(自定义非正数异常类),如果输入的成绩不是数值类型或者范围不在0~100之间,则进行相应的异常处理,并提示重新输入(自定义成绩范围类)
求写出完整代码,非常着急!!救救孩子吧乌乌,谢谢各位了!!重谢!
亲自测试可执行,希望能够帮助到你,如果有疑问请直接私信,如果没有疑问望采纳。运行结果和代码如下:可以直接复制运行
package com.example.demo;
import java.util.Objects;
import java.util.Scanner;
public class Score {
public static void main(String[] args) throws Exception {
System.out.println("请输入学生人数:");
Scanner sn = new Scanner(System.in);
int r;
while (true) {
// 先试用String接收,判断是否输入的是整数,如果是则转为正数,如果不是直接抛出自定义的异常,提示重新输入
String input = sn.next();
// 通过正则表达式判断输入的值是否是正数,
if (Objects.nonNull(input) && input.matches("^[0-9]*$")) {
r = Integer.parseInt(input);
break;
} else {
try {
throw new PositiveNumberException("输入的数值并不是正数");
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("请【重新】输入学生人数:");
}
}
}
double[][] arrScore = new double[r][3];
System.out.println("Number" + "\t" + "Chinese" + "\t" + "Math" + "\t" + "English" + "\t" + "Sum" + "\t" + "Average");
for (int i = 0; i < r; i++) {
double sumScore = 0;
System.out.println("请依次输入此名同学三门科目的成绩:");
for (int j = 0; j < 3; j++) {
String next;
double tempScore;
while (true) {
// 等待输入成绩,判断是否属于数值类型
next = sn.next();
if (Objects.nonNull(next) && next.matches("^[1-9]\\d*\\.?\\d*|0\\.?\\d*[1-9]\\d*$")) {
tempScore = Double.parseDouble(next);
// 判断输入的数值范围是否在0到100之间(自定义的成绩范围类)
String validResult = ScoreRangeNumber.validScoreRange(tempScore);
if(Objects.isNull(validResult)){
// 满足条件,则跳出循环
break;
} else {
// 不满足条件则抛出异常
try {
throw new PositiveNumberException(validResult);
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("请【重新】输入此名同学的科目成绩:");
}
}
} else {
try {
throw new PositiveNumberException("输入的不是数值类型");
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("请【重新】输入此名同学的科目成绩::");
}
}
}
arrScore[i][j] = tempScore;
sumScore += arrScore[i][j];
}
System.out.print("学生" + (i + 1) + "\t" + arrScore[i][0] + "\t" + arrScore[i][1] + "\t" + arrScore[i][2] + "\t" + sumScore + "\t");
System.out.println(sumScore / 3);
}
}
}
/**
* 正数异常类
*/
class PositiveNumberException extends Exception {
/**
* 异常类的构造方法
*/
public PositiveNumberException() {
}
public PositiveNumberException(String message) {
super(message);
}
}
/**
* 成绩范围类
*/
class ScoreRangeNumber {
/**
* 提供方法判断输入的成绩是否在0到100之间
*
* @param score
* @return
*/
public static String validScoreRange(double score) {
if (score < 0 || score > 100) {
return "输入成绩范围不在0到100之间,输入错误";
}
return null;
}
}
package exception;
import java.util.Scanner;
public class Score {
public static void main(String[] args) {
System.out.println("请输入学生人数:");
Scanner sn = new Scanner(System.in);
int r;
while (true) {
try {
String str = sn.next();
if (str != null && !"".equals(str.trim())) {
if (!str.matches("^[0-9]*$")) {
throw new NumberException();
} else {
r = Integer.parseInt(str);
break;
}
}
} catch (NumberException e) {
System.out.println("人数不是整数或者不是正数 请重新输入");
}
}
double[][] arrScore = new double[r][3];
System.out.println("Number" + "\t" + "Chinese" + "\t" + "Math" + "\t" + "English" + "\t" + "Sum" + "\t" + "Average");
for (int i = 0; i < r; i++) {
double sumScore = 0;
System.out.println("请依次输入此名同学三门科目的成绩:");
for (int j = 0; j < 3; j++) {
int score;
while (true) {
try {
String str = sn.next();
if (str != null && !"".equals(str.trim())) {
if (!str.matches("^[0-9]*$")) {
throw new NumberException();
} else {
score = Integer.parseInt(str);
}
if (score < 0 || score > 100) {
throw new ScoreException();
} else {
break;
}
}
} catch (NumberException e) {
System.out.println("成绩不是整数 请重新输入");
} catch (ScoreException e) {
System.out.println("成绩范围不在0~100之间 请重新输入");
}
}
arrScore[i][j] = score;
sumScore += arrScore[i][j];
}
System.out.print("学生" + (i + 1) + "\t" + arrScore[i][0] + "\t" + arrScore[i][1] + "\t" + arrScore[i][2] + "\t" + sumScore + "\t");
System.out.println(sumScore / 3);
}
System.out.print("Average" + "\t" + (arrScore[0][0] + arrScore[1][0] + arrScore[2][0] + arrScore[3][0] + arrScore[4][0]) / 5 + "\t");
System.out.print((arrScore[0][1] + arrScore[1][1] + arrScore[2][1] + arrScore[3][1] + arrScore[4][1]) / 5 + "\t");
System.out.print((arrScore[0][2] + arrScore[1][2] + arrScore[2][2] + arrScore[3][2] + arrScore[4][2]) / 5);
}
}
class ScoreException extends Exception {
private static final long serialVersionUID = 1L;
public ScoreException() {
}
}
class NumberException extends Exception {
private static final long serialVersionUID = 1L;
// 提供无参数的构造方法
public NumberException() {
}
}
import java.util.Scanner;
public class Score {
/**
* 非正数异常
*/
static class PositiveNumberException extends RuntimeException {
}
/**
* 超出范围 0~100 异常
*/
static class OutOfRangeException extends RuntimeException {
}
public static void main(String[] args)
{
System.out.println("请输入学生人数:");
Scanner sn = new Scanner(System.in);
int r = 0;
while (true) {
try {
r = Integer.parseInt(sn.nextLine());
if (r < 0) {
throw new PositiveNumberException();
}
break;
} catch (PositiveNumberException e) {
System.out.println("您输入的成绩不是正数,请重新输入:");
} catch (Exception e) {
System.out.println("您输入的成绩不是整数,请重新输入:");
}
}
double[][] arrScore = new double[r][3];
System.out.println("Number" + "\t" + "Chinese" + "\t" + "Math" + "\t" + "English" + "\t" + "Sum" + "\t" + "Average");
for (int i = 0; i < r; i++) {
double sumScore = 0;
System.out.println("请依次输入此名同学三门科目的成绩:");
for (int j = 0; j < 3; j++) {
try {
arrScore[i][j] = Integer.parseInt(sn.nextLine());
if (arrScore[i][j] < 0 || arrScore[i][j] > 100) {
throw new OutOfRangeException();
}
sumScore += arrScore[i][j];
} catch (OutOfRangeException e) {
System.out.println("您输入的成绩范围不在0~100之间,请重新输入:");
j--;
} catch (Exception e) {
System.out.println("您输入的成绩不是数值类型,请重新输入:");
j--;
}
}
System.out.print("学生" + (i + 1) + "\t" + arrScore[i][0] + "\t" + arrScore[i][1] + "\t" + arrScore[i][2] + "\t" + sumScore + "\t");
System.out.println(sumScore / 3);
}
System.out.print("Average" + "\t" + (arrScore[0][0] + arrScore[1][0] + arrScore[2][0] + arrScore[3][0] + arrScore[4][0]) / 5 + "\t");
System.out.print((arrScore[0][1] + arrScore[1][1] + arrScore[2][1] + arrScore[3][1] + arrScore[4][1]) / 5 + "\t");
System.out.print((arrScore[0][2] + arrScore[1][2] + arrScore[2][2] + arrScore[3][2] + arrScore[4][2]) / 5);
}
}
博主如果遇到其他问题,也可以私信我!
输入人数哪里已经校验了是否是整数哦!!