A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

问题描述:定义了功能,主函数调用后,程序只运行iF下的执行语句并且不判断条件,请问为什么?本人已经检查好多次了,希望不是太简单的问题,先谢了!
*
已知学生成绩以100分为满分,共分5个等级:A,B,C,D,E。
   90~100为等级A,80~89为等级B,70~79为等级C,
   60~69为等级D,0~59为等级E。
   要求定义一个成绩变量,当成绩变化时,可直接知道该成绩对应的等级。
   例如:当成绩为100时,该学生的等级时A。
   分析:需要定义一个取值范围,来描述学生成绩的范围。用||(双与逻辑运算符),有一个为true
   不执行第二个。
   有不确定的数据参加运算,定义一个为成绩的变量 x。
*/
class Test7
{
        public static void main(String[] args)
        {
                        int x =56;
                        getResult(b);
                        System.out.println("char b ="+b);
        }
            public static void getResult( int x ,char b)//应该是两个参数类型,一个整数成绩,一个等级分。
            {
                        if(x>=90  || x<=100)
                        {
                                System.out.println("C");//不清楚为什么,程序只运行第一个执行语句,而且不做判断!
                        }
                            else if (x>=80 || x<= 89)
                            {
                                    System.out.println("B");
                                }
                                else if(x>=70  ||  x<=79)
                                {
                                 System.out.println("A");
                                         }
                                 else if(x>=60 || x<=69)
                                 {
                                     System.out.println("D");
                                         }
                                 else
                                     System.out.println("E");
                }  
}       

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

8 个回复

倒序浏览
因为所有的分数都小于100,||是有一个真就真,你应该用&&。另外,这个用swich代码会简化很多。
回复 使用道具 举报 1 0
b的数据类型没有定义,运行时会报错找不到符号。
getResult定义了两个参数,在调用的时候也应该传递两个参数。
&&  和 ||  :前者是两个条件都必须符合,后者只取其一。
改了一下:
class  Test7
{
        public static void main(String[] args)
        {
                        int x =56;
                        getResult(x);//将要判断的成绩传入方法。方法中已经有输出语句了,直接调用方法就可以了
                        //System.out.println("char b ="+b);
        }
            public static void getResult( int x)//判断成绩的等级只需要将成绩变量传入就行
            {
                        if(x>=90  && x<=100) //判断时要求成绩>=90并且<=100所以用&&运算符
                        {
                                System.out.println("C");
                        }
                            else if (x>=80 && x<= 89)
                            {
                                    System.out.println("B");
                                }
                                else if(x>=70  &&  x<=79)
                                {
                                 System.out.println("A");
                                         }
                                 else if(x>=60 && x<=69)
                                 {
                                     System.out.println("D");
                                         }
                                 else
                                     System.out.println("E");
                }  
}      

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
  1. if(x>=90  || x<=100)        //x >= 90 或 x <= 100 已经包括了所有的区间了,就是无论什么int值 (x>=90  || x<=100)都是true,应该将||改为&&
  2. {
  3.         System.out.println("C");//不清楚为什么,程序只运行第一个执行语句,而且不做判断!
  4. }
复制代码

回复 使用道具 举报
int x =56;
getResult(b);
你定义了个变量x  怎么在传递函数时,用的是b
System.out.println("char b ="+b);
你这句话是什么意思? 你想得到函数的返回值?你下面定义的函数没有还回值
你分析的可能有问题   怎么可以用||  个来判断呢  一般不是用&&这个嘛
下面是我给出的一个用if 判断的方法
  1. public  static void getRes(int x){
  2.                 if(x<0 && x>100){
  3.                         System.out.println("输入的成绩无效");
  4.                         return;
  5.                 }
  6.                 if(x >= 90 && x<=100)
  7.                         System.out.println("A");
  8.                 else if(x >= 80 && x<=89)
  9.                         System.out.println("B");
  10.                 else if(x >=70 && x<=79)
  11.                         System.out.println("C");
  12.                 else if(x >=60 && x<=69)
  13.                         System.out.println("D");
  14.                 else
  15.                         System.out.println("E");
  16.         }
复制代码

if语句判断有点繁琐 比较麻烦 一般情况用 switch 比较简单 代码如下
  1.         public static void getResult(int x){
  2.                 int p = x/10;
  3.                 switch (p) {
  4.                 case 0:
  5.                 case 1:
  6.                 case 2:
  7.                 case 3:
  8.                 case 4:
  9.                 case 5:
  10.                         System.out.println("E");
  11.                         break;
  12.                 case 6:
  13.                         System.out.println("D");
  14.                         break;
  15.                 case 7:
  16.                         System.out.println("C");
  17.                         break;
  18.                 case 8:
  19.                         System.out.println("B");
  20.                         break;
  21.                 case 9:
  22.                 case 10:
  23.                         System.out.println("A");
  24.                         break;
  25.                        
  26.                 default:
  27.                         System.out.println("输入成绩无效");
  28.                 }
  29.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报

/*
首先你写的程序有逻辑错误,应该用&&
第二点是你定义的函数和传入的参数不一致,
        定义函数应该明确两点1、明确该功能运算完 产生结果的数据类型(即返回值类型)
                                        针对你的程序因为你在函数内部做了打印处理不需要返回值 所以返回值类型是void
                                 2、明确该函数运行过程中需要哪些未知内容参与运算(即参数列表)
                                         针对你的程序 只要定义好成绩 让程序帮你算出是什么等级,所以参与运算的只有一个整数,而你定义了两个
第三点建议多看看函数定义和逻辑运算符
*/
class Test7
{
        public static void main(String[] args)
        {
                        int x =56;
                        getResult(x);
                       //这句话可以省略不写,因为你已经在函数内部做了处理
                        //System.out.println("char b ="+b);
        }
        
        public static void getResult( int x )//应该是一个参数即整数成绩,通过函数帮你算出等级
                                                                                //并且你在函数内部做了打印动作,所以没有具体的返回值类型所以用void
        {
             if(x>=90  && x<=100)  //逻辑错误,这里应该是 &&,你想想如果是20分这条语句也满足条件
             {
                   System.out.println("C");//不清楚为什么,程序只运行第一个执行语句,而且不做判断!
                  
             }
             else if (x>=80 && x<= 89)
             {
                    System.out.println("B");
             }
             else if(x>=70  &&  x<=79)
             {
                 System.out.println("A");
             }
             else if(x>=60 && x<=69)
             {
                  System.out.println("D");
             }
             else
                   System.out.println("E");
              
        }
}   

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
你前面的代码都有问题!我帮你修改了一下。请查看:
  1. package com.itheima.test;

  2. class Test04 {
  3.         public static void main(String[] args) {
  4.                 int x = 90;
  5.                 getResult(x); // 你的这里的b都没定义过,这里应该直接将分数传递给函数,然后函数返回你所需要的等级结果。
  6.                 // System.out.println("char b ="+b); //这个语句是错误的,因为没有定义过b。
  7.         }

  8.         public static void getResult(int x)// 直接传递你的分数就行。
  9.         {
  10.                 if (x >= 90 && x <= 100) {
  11.                         System.out.println("A");// 不清楚为什么,程序只运行第一个执行语句,而且不做判断!
  12.                 } else if (x >= 80 && x <= 89) {
  13.                         System.out.println("B");
  14.                 } else if (x >= 70 && x <= 79) {
  15.                         System.out.println("C");
  16.                 } else if (x >= 60 && x <= 69) {
  17.                         System.out.println("D");
  18.                 } else
  19.                         System.out.println("E");
  20.         }
  21. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
郝大龙0104 发表于 2014-3-3 09:17
int x =56;
getResult(b);
你定义了个变量x  怎么在传递函数时,用的是b

谢谢!你帮了我很大的忙。:hug:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马