主题:测试结果不对
人间奇境
[专家分:0] 发布于 2007-11-15 17:49:00
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个回复)
沙发
piaoyexie [专家分:1380] 发布于 2007-11-15 19:24:00
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());
}
}
板凳
piaoyexie [专家分:1380] 发布于 2007-11-15 19:25:00
不知道你的 while 循环是干吗用的
3 楼
人间奇境 [专家分:0] 发布于 2007-11-15 19:35:00
[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 楼
人间奇境 [专家分:0] 发布于 2007-11-15 19:36:00
[quote]不知道你的 while 循环是干吗用的[/quote]
用来设置为空字符串时,重新输入用的
5 楼
人间奇境 [专家分:0] 发布于 2007-11-15 19:52:00
我把后面两个cName,cUnit删除,重新拷贝了一次,发现结果也是一样的,看来很可能是输出的问题了
6 楼
piaoyexie [专家分:1380] 发布于 2007-11-15 22:25:00
[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 楼
人间奇境 [专家分:0] 发布于 2007-11-16 11:39:00
[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 楼
piaoyexie [专家分:1380] 发布于 2007-11-16 13:19:00
不好意思,我写代码是先写再用 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 楼
sjhlovejava [专家分:1690] 发布于 2007-11-16 14:49:00
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 楼
chm51666 [专家分:240] 发布于 2007-11-18 12:56:00
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))).这样这条语句的三个部分都执行过了 同时对所有的属性都传了值进去.|和||返回的值是一样的.唯一的区别就是上面说的.(你上面的代码好多属性和方法名都不是很合理 最好改一下 增加代码的可读性)
我来回复