一、实验目的和要求
1. 熟悉JAVA的编程环境
2. 掌握分支、循环语句的使用
二、实验内容和原理
数制转换问题,编写一个应用,接收用户输入的一个10进制数,然后分别把它转换为2进制、8进制和16进制数输出。
三、实验环境
1. 硬件环境:
2. 软件环境:JDK1.5
四、算法描述及实验步骤
1. 算法描述(可以用流程图、伪代码或源程序描述)
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'
。
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');
}
}