回 帖 发 新 帖 刷新版面

主题:测试结果不对

import java.io.*;
public class KeCheng3 {
  private String cNumber;
  private String cName;
  private int cUnit;
  //以下课号
  public boolean setcNumber(String cNumber)
  {
         if(cNumber!=" ")
         {
             this.cNumber=cNumber;
             return true;
         }
         else return false;
  }
  public String getcNumbe()
  {
       return cNumber;
  }
  //以下课程名称
  public boolean setcName(String cName)
  {
         if(cName!=" ")
         {
             this.cName=cName;
             return true;
         }
         else return false;
  }
  public String cName()
  {
       return cName;
  }
  //以下学分
   public boolean setcUnit(int cUnit)
  {
         if(cUnit>=0)
         {
             this.cUnit=cUnit;
             return true;
         }
         else return false;
  }
  public int getcUnit()
  {
       return cUnit;
  }
  //以下输出
   String printCourseInfo()
   {
             return "学号:"+cNumber+"\r课号:"+cName+"\r学分:"+cUnit;
   }  
   
//    public KeCheng3() {
//    }
    
  
    public static void main(String[] args)throws IOException 
    {
        BufferedReader kc=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入课号");
            String cNum=kc.readLine();
        System.out.println("请输入课程名称");
            String cNa=kc.readLine();
        System.out.println("请输入学分");
            int cUn=Integer.parseInt(kc.readLine());
        
        KeCheng3 javas=new KeCheng3();
        while(!(javas.setcNumber(cNum)||javas.setcName(cNa)||javas.setcUnit(cUn)))
        {
            System.out.println("你没有输入号码或者课程名称为空,也可能输入了非整数或为空的学分\t请重新输入");
            System.out.println("请重新输入号码");
            cNum=kc.readLine();
            System.out.println("请重新输入课程名称");
            cNa=kc.readLine();
            System.out.println("请重新输入学分");
            cUn=Integer.parseInt(kc.readLine());
        }
       System.out.println(javas.printCourseInfo());
    }
}


结果是:
请输入号码
43
请输入课程名称
23
请输入学分
12
学号:43
课号:null
学分:0

处理已完成。
但是结果却不对,第一个没问题,后面是copy前面的也会错啊
不懂,第一个,号码的结果没问题,
但是第2,3个就不行,
23对null,12对0?
会的人指导下

回复列表 (共12个回复)

11 楼

[quote]while(!(javas.setcNumber(cNum)||javas.setcName(cNa)||javas.setcUnit(cUn)))

改为:

while(!(javas.setcNumber(cNum)|javas.setcName(cNa)|javas.setcUnit(cUn)))

就可以了.

因为javas.setcNumber(cNum)||javas.setcName(cNa)||javas.setcUnit(cUn)
当javas.setcNumber(cNum)返回为true时,下面语句的就不执行了,
这样,你就只把cNum的值赋值给cNumber,而其他的两个就没赋值给cName和cUnit了
所以会产生那样的打印的结果.

而javas.setcNumber(cNum)|javas.setcName(cNa)|javas.setcUnit(cUn))
则不管哪个方法返回什么,它都会执行下去

而且,你的逻辑存在很多漏洞,自己再慢慢调试吧!!!
[/quote]
我那个是抄书然后根据书改的,
我的逻辑存在漏洞,谢谢你的提醒

12 楼

[quote]while(!(javas.setcNumber(cNum)||javas.setcName(cNa)||javas.setcUnit(cUn)))

改为:

while(!(javas.setcNumber(cNum)|javas.setcName(cNa)|javas.setcUnit(cUn)))

就可以了.

因为javas.setcNumber(cNum)||javas.setcName(cNa)||javas.setcUnit(cUn)
当javas.setcNumber(cNum)返回为true时,下面语句的就不执行了,
这样,你就只把cNum的值赋值给cNumber,而其他的两个就没赋值给cName和cUnit了
所以会产生那样的打印的结果.

而javas.setcNumber(cNum)|javas.setcName(cNa)|javas.setcUnit(cUn))
则不管哪个方法返回什么,它都会执行下去

而且,你的逻辑存在很多漏洞,自己再慢慢调试吧!!!
[/quote]
是这样啊,明白了

我来回复

您尚未登录,请登录后再回复。点此登录或注册