作业里,变量初始化问题
import java.util.Scanner;
public class HomeWork{
//显示菜单的方法
public void menu(){
System.out.println("*****************************************");
System.out.println(" 1--初始化数学成绩");
System.out.println(" 2--求成绩的平均值");
System.out.println(" 3--统计成绩大于85分的人数");
System.out.println(" 4--修改指定位置处的成绩");
System.out.println(" 5--打印输出所有成绩");
System.out.println(" 0--退出");
System.out.println("*****************************************");
}
//初始化数学成绩的方法
public float[] score() {
Scanner input=new Scanner(System.in);
System.out.println("请输入要存储的数学成绩的数量:");
int num=0;
while(true){
try{num=input.nextInt();
}catch(java.util.InputMismatchException e){
System.out.println("输入的格式有误,或有小数或非数字!");
input.next();
}
if(num>0){
break;
}
}
float[] score=new float[num];
for(int a=0;a<num;a++){
System.out.println("请输入第"+(a+1)+"个数据:");
try{score[a]=input.nextFloat();
}catch(java.util.InputMismatchException e){
System.out.println("输入的格式有误,或有小数或非数字!");
input.next();
a--;
}
}
return score;
}
//求平均值的方法
public float average(float[] f) {
float sum=0;
for(float n: f){
sum=sum+n;
}
float ave=sum/f.length;
return ave;
}
//求分数大于85分的人数的方法
public int count(float[] f) {
int count=0;
for(float n : f){
if(n>85){
count++;
}
}
return count;
}
//修改指定位置处成绩的方法
public void update(float[] f, int index, float newScore) {
f[index]=newScore;
System.out.println("修改后:");
System.out.println("成绩为:");
for(float n : f){
System.out.print(n+"\t");
}
System.out.println();
}
//打印输出所有成绩的方法
public void displayAllScore(float[] f) {
System.out.println("成绩为:");
for(float n : f){
System.out.print(n+"\t");
}
System.out.println();
}
//主方法,用于完成主要的程序逻辑
public static void main(String [] args){
Scanner input=new Scanner(System.in);
HomeWork sc=new HomeWork();
int num=0;//Question:在初始化变量这块儿,理解不清楚
float[] stuScore=null;
float ave;
int highScore;
for(;;){
sc.menu();
System.out.println("请输入对应的数字进行操作:");
try{num=input.nextInt();
}catch(java.util.InputMismatchException e){
System.out.println("输入的格式有误,或有小数或非数字!");
input.next();
continue;
}
if(num<0|num>5){
System.out.println("输入有误,请输入0到5之间的数字!");
}
if(num==0){
System.out.println("退出程序!");
break;
}
switch(num){
case 1 : stuScore=sc.score();
break;
case 2 : if(stuScore !=null){ave=sc.average(stuScore);
System.out.println("数学平均成绩为:"+ave);
}else{
System.out.println("您还未输入数学成绩!");
}
break;
case 3 : if(stuScore !=null){highScore=sc.count(stuScore);
System.out.println("成绩大于85分的人数为:"+highScore);
}else{
System.out.println("您还未输入数学成绩!");
}
break;
case 4 : if(stuScore !=null){System.out.println("修改前:");
System.out.println("成绩为:");
for(float n : stuScore){
System.out.print(n+"\t");
}
System.out.println();
System.out.println("请输入要修改数据的位置(从0开始):");
try{int point=input.nextInt();
System.out.println("请输入新数据:");
float newScore=input.nextFloat();
sc.update(stuScore,point,newScore);
}catch(java.util.InputMismatchException e){
System.out.println("输入的格式有误,或有小数或非数字!");
input.next();
break;
}
}else{
System.out.println("您还未输入数学成绩!");
}
break;
case 5 : if(stuScore !=null){sc.displayAllScore(stuScore);
}else{
System.out.println("您还未输入数学成绩!");
}
}}
}
}
老师好,这是完整代码,主方法里面的变量,在进入for循环前,既有声明初始化的,也有只声明的,还有只是在swich结构中定义声明
的。就是因为这三种情况,导致我很混乱。希望老师能帮我解答,谢谢您那!
正在回答
同学你好,老师已经在另一个问答下回答了,为老师能够跟踪同学的问题,高效的回复同学的问题,建议同学不要同一个问题创建两个问答。如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
同学你好,局部变量是在方法或者代码块中定义的变量,可以以一对大括号来判断,在一个大括号中定义的变量,只能在该大括号之内使用,同学要先理解这个概念。1.首先在循环之前定义的num如果赋值为0,在循环中num=input.nextInt();属于重新赋值,当然不会报错。其次在循环之前不为num赋值,只在循环内进行赋值,也不会报错。同学可以试验一下。2.首先stuScore赋值为空时,数组为null,数组元素不存在,所以此时数组元素还不是0。其次,当stuScore先不赋值时,如图所示:3.同学可以参考1和2的解释。4.在try块中声明的变量只在try块中使用,没有在try块(可以看下try的大括号)之外的地方使用,所以不会报错。【注:1.int a;表示定义了一个变量a;2.只有“=”才是赋值符号】建议同学再重新观看一遍关于变量的视频:https://class.imooc.com/course/976,如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星