回 帖 发 新 帖 刷新版面

主题:测试结果不对

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个回复)

沙发

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class KeCheng3 {
    private String cNumber;
    private String cName;
    private int cUnit;

    // 以下课号
    public boolean setcNumber(String cNumber) {
        if (cNumber != "" || cNumber != null || cNumber.matches("\\S")) {
            this.cNumber = cNumber;
            return true;
        } else
            return false;
    }

    public String getcNumber() {
        return cNumber;
    }

    // 以下课程名称
    public boolean setcName(String cName) {
        if (cName != "" || cName != null || cName.matches("\\S")) {
            this.cName = cName;
            return true;
        } else
            return false;
    }

    public String getcName() {
        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 "学号:" + this.getcNumber() + "\r课号:" + getcName() + "\r学分:"
                + getcUnit();
    }

    // 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();
        javas.setcNumber(cNum);
        javas.setcName(cNa);
        javas.setcUnit(cUn);
        System.out.println(javas.printCourseInfo());
    }
}

板凳

不知道你的 while 循环是干吗用的

3 楼

[quote]package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class KeCheng3 {
    private String cNumber;
    private String cName;
    private int cUnit;

    // 以下课号
    public boolean setcNumber(String cNumber) {
        if (cNumber != "" || cNumber != null || cNumber.matches("\\S")) {
            this.cNumber = cNumber;
            return true;
        } else
            return false;
    }

    public String getcNumber() {
        return cNumber;
    }

    // 以下课程名称
    public boolean setcName(String cName) {
        if (cName != "" || cName != null || cName.matches("\\S")) {
            this.cName = cName;
            return true;
        } else
            return false;
    }

    public String getcName() {
        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 "学号:" + this.getcNumber() + "\r课号:" + getcName() + "\r学分:"
                + getcUnit();
    }

    // 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();
        javas.setcNumber(cNum);
        javas.setcName(cNa);
        javas.setcUnit(cUn);
        System.out.println(javas.printCourseInfo());
    }
}
[/quote]
没用到其他包,只用import java.io.*;

4 楼

[quote]不知道你的 while 循环是干吗用的[/quote]
用来设置为空字符串时,重新输入用的

5 楼

我把后面两个cName,cUnit删除,重新拷贝了一次,发现结果也是一样的,看来很可能是输出的问题了

6 楼

[quote][quote]package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class KeCheng3 {
    private String cNumber;
    private String cName;
    private int cUnit;

    // 以下课号
    public boolean setcNumber(String cNumber) {
        if (cNumber != "" || cNumber != null || cNumber.matches("\\S")) {
            this.cNumber = cNumber;
            return true;
        } else
            return false;
    }

    public String getcNumber() {
        return cNumber;
    }

    // 以下课程名称
    public boolean setcName(String cName) {
        if (cName != "" || cName != null || cName.matches("\\S")) {
            this.cName = cName;
            return true;
        } else
            return false;
    }

    public String getcName() {
        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 "学号:" + this.getcNumber() + "\r课号:" + getcName() + "\r学分:"
                + getcUnit();
    }

    // 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();
        javas.setcNumber(cNum);
        javas.setcName(cNa);
        javas.setcUnit(cUn);
        System.out.println(javas.printCourseInfo());
    }
}
[/quote]
没用到其他包,只用import java.io.*;[/quote]

崩溃。。。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
只不过是指明了那几个类
import java.io.*;
是 java.io 包下所有类

7 楼

[quote][quote][quote]package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class KeCheng3 {
    private String cNumber;
    private String cName;
    private int cUnit;

    // 以下课号
    public boolean setcNumber(String cNumber) {
        if (cNumber != "" || cNumber != null || cNumber.matches("\\S")) {
            this.cNumber = cNumber;
            return true;
        } else
            return false;
    }

    public String getcNumber() {
        return cNumber;
    }

    // 以下课程名称
    public boolean setcName(String cName) {
        if (cName != "" || cName != null || cName.matches("\\S")) {
            this.cName = cName;
            return true;
        } else
            return false;
    }

    public String getcName() {
        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 "学号:" + this.getcNumber() + "\r课号:" + getcName() + "\r学分:"
                + getcUnit();
    }

    // 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();
        javas.setcNumber(cNum);
        javas.setcName(cNa);
        javas.setcUnit(cUn);
        System.out.println(javas.printCourseInfo());
    }
}
[/quote]
没用到其他包,只用import java.io.*;[/quote]

崩溃。。。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
只不过是指明了那几个类
import java.io.*;
是 java.io 包下所有类[/quote]
好像只要用import java.io.*;
就可以包含
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader
也挺方便的
至于崩溃,不至于,试过了
import java.io.*;
只是楼顶的那个问题一直解决不了

8 楼

不好意思,我写代码是先写再用 ctrl+alt+o 来导入用类的,而不是先去想要用到哪些包
至于想用循环录入数据再打印出来那很简单
BufferedReader kc = new BufferedReader(new InputStreamReader(System.in));
KeCheng3 javas = new KeCheng3();
do{
System.out.println("请输入课号");

        String cNum = kc.readLine();
        System.out.println("请输入课程名称");
        String cNa = kc.readLine();
        System.out.println("请输入学分");
        int cUn = Integer.parseInt(kc.readLine());
        javas.setcNumber(cNum);
        javas.setcName(cNa);
        javas.setcUnit(cUn);
        System.out.println(javas.printCourseInfo());
}while(结束条件)

如果要全部输入之后再打印出来的话就要用数组了

9 楼

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))
则不管哪个方法返回什么,它都会执行下去

而且,你的逻辑存在很多漏洞,自己再慢慢调试吧!!!

10 楼

return "学号:"+cNumber+"\r课号:"+cName+"\r学分:"+cUnit;
换行符是\n   不是\r, 肯定是手误~呵呵
然后就是这句while(!(javas.setcNumber(cNum)||javas.setcName(cNa)||javas.setcUnit(cUn)))
用||那么就是说执行了第一个javas.setcNumber(cNum),如果返回一个TRUE那么下面两句就不会执行 ,如果返回FALSE那么继续往下执行直到返回TRUE为止,但是| 是需要讲所有的语句全执行一遍 ,然后系统判断正条语句的真假.所以这个地方应该改为 while(!(javas.setcNumber(cNum)|javas.setcName(cNa)|javas.setcUnit(cUn))).这样这条语句的三个部分都执行过了  同时对所有的属性都传了值进去.|和||返回的值是一样的.唯一的区别就是上面说的.(你上面的代码好多属性和方法名都不是很合理  最好改一下  增加代码的可读性)

我来回复

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