一、实验目的和要求

1. 熟悉JAVA的编程环境

2. 掌握分支、循环语句的使用

二、实验内容和原理

数制转换问题,编写一个应用,接收用户输入的一个10进制数,然后分别把它转换为2进制、8进制和16进制数输出。

三、实验环境

1. 硬件环境:

2. 软件环境:JDK1.5

四、算法描述及实验步骤

1. 算法描述(可以用流程图、伪代码或源程序描述)

java 实验管理系统 java实验流程图_java

2. 实验步骤

l 输入源代码

package controlstatements;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO code application logic here
DataTransfer data =new DataTransfer ();
Scanner scanner =new Scanner(System.in);
System.out.print ("please enter an num:
");
int num =scanner.nextInt();
String a =data.toBinary(num);
String b =data.toOctal(num);
String c =data.toHexadecimal(num);
System.out.print("十进制转化为二进制"+a
);
System.out.print("十进制转化为八进制"+
b);
System.out.print("十进制转化为十六进制"+c
);
}
}
class DataTransfer {
public String toBinary(int num){
String binary = transfer2Other(num, 2);
return binary;
}
public String toOctal(int num){
java.lang.String octal = transfer2Other(num, 8);
return octal;
}
public String toHexadecimal(int num){
String hexadecimal = transfer2Other(num,16);
return hexadecimal;
}
private String transfer2Other(int num,int base){
String str =new String();
int D;
while ( num != 0) {
D = num % base;
str = toChar(D) + str; //toChar是一个用户自定义函数,用于把数字转化为字符
num = num / base;
}
return str;
}
public char toChar(int decade){
return (char)(decade+'0');
}
}

l 进行编译

编译无错误。

l 进行测试,使用的测试用例:

输入: 8 预期输出:1000 ,17 ,8

输入: 10 预期输出:1010 ,12 ,A

输入: 11 预期输出:1011 ,13 ,B

输入: 12 预期输出:1100 ,14 ,C

输入: 13 预期输出:1101 ,15 ,D

输入: 14 预期输出:1110 ,16 ,E

输入: 15 预期输出:1111 ,17 ,F

五、调试过程

1. 编译过程

记录算法实现中发现的语法错误及改正

给char transition 赋予一个初值'A'

java 实验管理系统 java实验流程图_java

2. 调试过程

记录算法实现中发现的逻辑错误及改正,对每个测试用例,记录实际输出,并与预期输出进行比较,如果不同,分析产生错误的原因并改正。

输入:8

预期输出:1000 ,17 ,8

实际输出:1000 ,17 ,8

输入:10

预期输出:1010 ,12 ,A

实际输出:1010 ,12 ,:

输入:11

预期输出:1011 ,13 ,B

实际输出:1011 ,13 ,;

输入:12

预期输出:1100 ,14 ,C

实际输出:1100 ,14 ,<

输入:13

预期输出:1101 ,15 ,D

实际输出:1101 ,15 ,=

输入:14

预期输出:1110 ,16 ,E

实际输出:1110 ,16 ,>

输入:15

预期输出:1111 ,17 ,F

实际输出:1111 ,17 ,?

分析:因为代码没有考虑到十六进制中ABCDEF的含义。

六、实验结果

用与测试用例不同的输入数据运行算法,写出得到的结果,并分析结果是否正确。

输入:17

输出结果:10001 ,21 ,11

结果分析:输出结果正确。

七、总结

第一次做java实验,问题出现的还是挺多的,因为对java的运用还是不熟悉,在课上觉得Java和之前的没多大差别,但操作起来那一点的差别也让自己苦恼。今天上的实验课是有史以来第一次要求在实验课上要完成好的,所以感觉这次是最有效率的一次。

附录:

如果原来的算法中发现了错误,在附录中附上改正后的算法实现。

package controlstatements;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
// TODO Auto-generated method stub
DataTransfer data =new DataTransfer ();
Scanner scanner =new Scanner(System.in);
System.out.print ("please enter an num:
");
int num =scanner.nextInt();
String binary =data.toBinary(num);
String octal =data.toOctal(num);
String hexadecimal =data.toHexadecimal(num);
System.out.println("十进制转化为二进制"
+binary );
System.out.println("十进制转化为八进制"
+octal);
System.out.println("十进制转化为十六进制"
+hexadecimal);
}
}
class DataTransfer {
public String toBinary(int num){
return transfer2Other(num, 2);
}
public String toOctal(int num){
return transfer2Other(num, 8);
}
public String toHexadecimal(int num){
return transfer2Other(num,16);
}
private String transfer2Other(int num,int
base){
String str =new String();
int D;
char transition ='A';
while ( num != 0) {
D = num % base;
if(D >=10
&& D <= 16){
switch(D){
case 10: transition ='A';break;
case 11: transition ='B';break;
case 12: transition ='C';break;
case 13: transition ='D';break;
case 14: transition ='E';break;
case 15: transition ='F';break;
default:;
}
}
else{
transition = toChar(D);//toChar是一个用户自定义函数,用于把数字转化为字符
}
str =transition +str;
num = num / base;
}
return str;
}
private char toChar(int decade){
return (char)(decade+'0');
}
}