80,350
社区成员
发帖
与我相关
我的任务
分享
package com.Elzsx.Switch;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class Switch extends Activity implements OnClickListener {
/** Called when the activity is first created. */
private EditText Number = null;
private EditText FromBinary = null;
private EditText ToBinary = null;
private Button SwitchButton = null;
private Button ExitButton = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Number = (EditText) findViewById(R.id.Number_EditText);
FromBinary = (EditText) findViewById(R.id.FromBinary);
ToBinary = (EditText) findViewById(R.id.ToBinary);
SwitchButton = (Button) findViewById(R.id.Switch_Button);
SwitchButton.setOnClickListener(this);
ExitButton = (Button) findViewById(R.id.Exit_Button);
ExitButton.setOnClickListener(this);
}
protected void onResume() {
super.onResume();
}
protected void onPause() {
super.onPause();
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.Switch_Button:
Intent i = new Intent(this, Result.class);
String NumberStr = Number.getText().toString();
String FromBinaryStr = FromBinary.getText().toString();
String ToBinaryStr = ToBinary.getText().toString();
i.putExtra("Num", NumberStr);
i.putExtra("From", FromBinaryStr);
i.putExtra("To", ToBinaryStr);
startActivity(i);
break;
// More buttons go here (if any) ...
case R.id.Exit_Button:
finish();
break;
}
}
}
// 浮点数小数部份转换为十进制
String lessToTenSystem() throws Exception {
String strNum = Number.toUpperCase();
int JZ = Integer.parseInt(FromBinary);// 获得原数进制
double longNum = 0;
int len = strNum.length(); // 取得字符的长度
int tInt = 0; // 取第tInt个字符
int gotNum = 0; // 取出的字符转换为数字
int cfInt = -1; // 多少次次方
while (len > 0) {
String tChar = strNum.substring(tInt, tInt + 1); // 一个一个字符的取
gotNum = Integer.parseInt(letterToInteger(tChar));
// 保存出小数部份从对应的进制到十进制的总值
longNum = longNum + gotNum * (Math.pow(JZ, cfInt)); // 关键算法
tInt++; // 字符串中位置加一
len--; // 字符串总长度减一
cfInt--;
}
return String.valueOf(longNum);
}
// 返回一个浮点数的整数或者是小数部份
String returnWantPart(String doubleNum, String whichPart)
throws Exception
{
String strNum = doubleNum;
String leftStr;
String rightStr;
//如果输入的是一个浮点数
if (strNum.indexOf(".") != -1)
{
StringTokenizer fenxi = new StringTokenizer(strNum, ".");
leftStr = fenxi.nextToken();
rightStr = fenxi.nextToken();
}
else
{ //如果输入的是一个整数
leftStr = strNum;
rightStr = "0";
}
String returnStr = "";
if (whichPart.equals("left"))
returnStr = leftStr;
else if (whichPart.equals("right"))
returnStr = rightStr;
return returnStr;
}
// *****************************任意进制到十进制的转换*****************************
// *****************************十进制到任意进制的转换*****************************
String tenToAnySystem_Int(String strInt) { // 因为由任意进制到十进制的转换结果为"整数部分.小数部份"
// 也就是分成整数和小数部份分别转换
// 此函数完成的功能是十进制的整数部分到任意进制的转换
try {
// 取出整数部份
strInt = returnWantPart(strInt,"left");
} catch (Exception e) {
e.printStackTrace();
}
int JZ = Integer.parseInt(ToBinary);
long intStr = Long.parseLong(strInt);
long[] result = new long[50]; // 保存相除的余数
String resultStr = "";
int i = 0; // 数组的下标
while (intStr != 0) {
result[i] = intStr % JZ; // 取出余数
// 现数为减去余数的数整除进制
intStr = intStr - result[i];
intStr = intStr / JZ;
i++; // 数组下标增加一
}
// 将数组全部反序排列,并返回结果
for (int j1 = 0, j2 = i - 1; j1 < (i / 2); j1++, j2--) {
long temp = 0;
temp = result[j1];
result[j1] = result[j2];
result[j2] = temp;
}
for (int j = 0; j < i; j++) {
resultStr = resultStr + intToLetter(result[j]);
}
return resultStr;
}
// 此函数完成的功能是十进制的小数部分到任意进制的转换
String tenToAnySystem_Less(String strLess) {
int JZ = Integer.parseInt(ToBinary);
double T = 0;
T = Double.parseDouble(strLess);
String resultStr = "";
String strInt = "";
// 精度取到小数点后面6位为止
int JingDu = 0;
int i = 0; // 数组下标
int[] result = new int[50];
for (int j = 0; j < 50; j++)
// 将数组初使化
result[j] = 0;
try {
while (JingDu <= 6 && T > 0.000001) {
double tNum = 0;
tNum = T * JZ;
if (tNum > 1) { // 取出整数部份
try {
strInt = returnWantPart(String.valueOf(tNum), "left");
} catch (Exception e) {
e.printStackTrace();
}
result[i] = Integer.parseInt(strInt);
T = tNum - result[i]; // 将当前数减去取出来的数 ,用于下一次循环
} else {
// 如果整数小于零,那么整数部分就是0
result[i] = 0;
}
JingDu++;
i++;
}
} catch (Exception e) {
e.printStackTrace();
}
for (int j = 0; j < i; j++)
resultStr = resultStr + String.valueOf(result[j]);
if (i == 0)
return "0";
else
return resultStr;
}
// 将取得的数字转换为相应的字母
String intToLetter(long num) {
String result = "";
String S = "";
if (0 <= num && num <= 9)
result = String.valueOf(num);
else if (num > 9) {
S = String.valueOf(num); // 将长整型转换为字符串型
switch (Integer.parseInt(S)) // 将字符串型转换为整型
{
case 10:
result = "A";
break;
case 11:
result = "B";
break;
case 12:
result = "C";
break;
case 13:
result = "D";
break;
case 14:
result = "E";
break;
case 15:
result = "F";
break;
case 16:
result = "G";
break;
case 17:
result = "H";
break;
case 18:
result = "I";
break;
case 19:
result = "G";
break;
case 20:
result = "K";
break;
case 21:
result = "L";
break;
case 22:
result = "M";
break;
case 23:
result = "N";
break;
case 24:
result = "O";
break;
case 25:
result = "P";
break;
case 26:
result = "Q";
break;
case 27:
result = "R";
break;
case 28:
result = "S";
break;
case 29:
result = "T";
break;
case 30:
result = "U";
break;
case 31:
result = "V";
break;
case 32:
result = "W";
break;
case 33:
result = "X";
break;
case 34:
result = "Y";
break;
case 35:
result = "Z";
break;
}
}
return result;
}
// *****************************十进制到任意进制的转换*****************************
}
package com.Elzsx.Switch;
import java.util.StringTokenizer;
public class Calculate {
private String FromBinary = null;
private String ToBinary = null;
private String Number = null;
public Calculate(String FB, String TB, String Num) {
FromBinary = FB;
ToBinary = TB;
Number = Num;
}
// 转换方法:先将任意进制数转换为十进制数,再将十进制数转换为指定进制数(浮点数)
/*
* 1、任意进制转换为10进制的转换 分别对整数和小数部分进行转换,再将分别转换后的结果进行拼合,利用相乘相加的原则
* 整数部分:(如111的二进制到十进制就是:1*pow(2,2)+1*pow(2,1)+1*pow(2,0)) 小数部分:利用相乘相加的原则
* 2、10进制转换到任意进制的转换 分别对整数和小数部分进行转换,再将分别转换后的结果进行拼合 整数部分:利用相除取余的原则
* 小数部分:利用相乘取整的原则
*/
// *****************************任意进制到十进制的转换*****************************
// 任意进制到十进制的转换
// 保证输入的数与进制相配
boolean checkInputNumIsOK() {
int i = 0;
for (; i < Number.length(); i++) {
String Num = Number.substring(i, i + 1);
if (Integer.parseInt(Num) > Integer.parseInt(FromBinary) - 1) {
return false;
}
}
return true;
}
// 对于十进制以上的进制,由取得的字符返回相应的数字
String letterToInteger(String tChar) {
int gotNum = 0;
int kg = 0; // 确定前面该字符是不是已经赋值,这就是使用if语句所留下的后症 - -b
String S;
if (tChar.equals("A")) {
gotNum = 10;
kg = 1;
} else if (tChar.equals("B")) {
gotNum = 11;
kg = 1;
} else if (tChar.equals("C")) {
gotNum = 12;
kg = 1;
} else if (tChar.equals("D")) {
gotNum = 13;
kg = 1;
} else if (tChar.equals("E")) {
gotNum = 14;
kg = 1;
} else if (tChar.equals("F")) {
gotNum = 15;
kg = 1;
} else if (tChar.equals("G")) {
gotNum = 16;
kg = 1;
} else if (tChar.equals("H")) {
gotNum = 17;
kg = 1;
} else if (tChar.equals("I")) {
gotNum = 18;
kg = 1;
} else if (tChar.equals("J")) {
gotNum = 19;
kg = 1;
} else if (tChar.equals("K")) {
gotNum = 20;
kg = 1;
} else if (tChar.equals("L")) {
gotNum = 21;
kg = 1;
} else if (tChar.equals("M")) {
gotNum = 22;
kg = 1;
} else if (tChar.equals("O")) {
gotNum = 23;
kg = 1;
} else if (tChar.equals("P")) {
gotNum = 24;
kg = 1;
} else if (tChar.equals("Q")) {
gotNum = 25;
kg = 1;
} else if (tChar.equals("R")) {
gotNum = 26;
kg = 1;
} else if (tChar.equals("S")) {
gotNum = 27;
kg = 1;
} else if (tChar.equals("T")) {
gotNum = 28;
kg = 1;
} else if (tChar.equals("U")) {
gotNum = 29;
kg = 1;
} else if (tChar.equals("V")) {
gotNum = 30;
kg = 1;
} else if (tChar.equals("W")) {
gotNum = 31;
kg = 1;
} else if (tChar.equals("X")) {
gotNum = 32;
kg = 1;
} else if (tChar.equals("Y")) {
gotNum = 33;
kg = 1;
} else if (tChar.equals("Z")) {
gotNum = 34;
kg = 1;
} else if (kg == 0) {
gotNum = Integer.parseInt(tChar);
}
S = String.valueOf(gotNum);
return S;
}
// 浮点数的整数部份转换为十进制
String intToTenSystem() throws Exception {
String strNum = Number.toUpperCase(); // 全部转换为大写,方便字符到数字的转换
int JZ = Integer.parseInt(FromBinary);// 获得原数进制
double longNum = 0;
int len = strNum.length(); // 取得字符串的长度
int tInt = 0; // 初使化数组位置为0
int gotNum = 0; // 一个一个字符取出所对应的数字
while (len > 0) { // 如果没有将字符串的字符转换完,就继续
String tChar = strNum.substring(tInt, tInt + 1); // 一个一个字符的取
gotNum = Integer.parseInt(letterToInteger(tChar));
longNum = longNum + gotNum * (Math.pow(JZ, len - 1));
tInt++;
len--;
}
return String.valueOf(longNum);
}
// 浮点数小数部份转换为十进制
String lessToTenSystem() throws Exception {
String strNum = Number.toUpperCase();
int JZ = Integer.parseInt(FromBinary);// 获得原数进制
double longNum = 0;
int len = strNum.length(); // 取得字符的长度
int tInt = 0; // 取第tInt个字符
int gotNum = 0; // 取出的字符转换为数字
int cfInt = -1; // 多少次次方
while (len > 0) {
String tChar = strNum.substring(tInt, tInt + 1); // 一个一个字符的取
gotNum = Integer.parseInt(letterToInteger(tChar));
// 保存出小数部份从对应的进制到十进制的总值
longNum = longNum + gotNum * (Math.pow(JZ, cfInt)); // 关键算法
tInt++; // 字符串中位置加一
len--; // 字符串总长度减一
cfInt--;
}
return String.valueOf(longNum);
}
// 返回一个浮点数的整数或者是小数部份
String returnWantPart(String doubleNum, String whichPart)
throws Exception
{
String strNum = doubleNum;
String leftStr;
String rightStr;
//如果输入的是一个浮点数
if (strNum.indexOf(".") != -1)
{
StringTokenizer fenxi = new StringTokenizer(strNum, ".");
leftStr = fenxi.nextToken();
rightStr = fenxi.nextToken();
}
else
{ //如果输入的是一个整数
leftStr = strNum;
rightStr = "0";
}
String returnStr = "";
if (whichPart.equals("left"))
returnStr = leftStr;
else if (whichPart.equals("right"))
returnStr = rightStr;
return returnStr;
}
// *****************************任意进制到十进制的转换*****************************
// *****************************十进制到任意进制的转换*****************************
String tenToAnySystem_Int(String strInt) { // 因为由任意进制到十进制的转换结果为"整数部分.小数部份"
// 也就是分成整数和小数部份分别转换
// 此函数完成的功能是十进制的整数部分到任意进制的转换
try {
// 取出整数部份
strInt = returnWantPart(strInt,"left");
} catch (Exception e) {
e.printStackTrace();
}
int JZ = Integer.parseInt(ToBinary);
long intStr = Long.parseLong(strInt);
long[] result = new long[50]; // 保存相除的余数
String resultStr = "";
int i = 0; // 数组的下标
while (intStr != 0) {
result[i] = intStr % JZ; // 取出余数
// 现数为减去余数的数整除进制
intStr = intStr - result[i];
intStr = intStr / JZ;
i++; // 数组下标增加一
}
// 将数组全部反序排列,并返回结果
for (int j1 = 0, j2 = i - 1; j1 < (i / 2); j1++, j2--) {
long temp = 0;
temp = result[j1];
result[j1] = result[j2];
result[j2] = temp;
}
for (int j = 0; j < i; j++) {
resultStr = resultStr + intToLetter(result[j]);
}
return resultStr;
}
// 此函数完成的功能是十进制的小数部分到任意进制的转换
String tenToAnySystem_Less(String strLess) {
int JZ = Integer.parseInt(ToBinary);
double T = 0;
T = Double.parseDouble(strLess);
String resultStr = "";
String strInt = "";
// 精度取到小数点后面6位为止
int JingDu = 0;
int i = 0; // 数组下标
int[] result = new int[50];
for (int j = 0; j < 50; j++)
// 将数组初使化
result[j] = 0;
try {
while (JingDu <= 6 && T > 0.000001) {
double tNum = 0;
tNum = T * JZ;
if (tNum > 1) { // 取出整数部份
try {
strInt = returnWantPart(String.valueOf(tNum), "left");
} catch (Exception e) {
e.printStackTrace();
}
result[i] = Integer.parseInt(strInt);
T = tNum - result[i]; // 将当前数减去取出来的数 ,用于下一次循环
} else {
// 如果整数小于零,那么整数部分就是0
result[i] = 0;
}
JingDu++;
i++;
}
} catch (Exception e) {
e.printStackTrace();
}
for (int j = 0; j < i; j++)
resultStr = resultStr + String.valueOf(result[j]);
if (i == 0)
return "0";
else
return resultStr;
}
// 将取得的数字转换为相应的字母
String intToLetter(long num) {
String result = "";
String S = "";
if (0 <= num && num <= 9)
result = String.valueOf(num);
else if (num > 9) {
S = String.valueOf(num); // 将长整型转换为字符串型
switch (Integer.parseInt(S)) // 将字符串型转换为整型
{
case 10:
result = "A";
break;
case 11:
result = "B";
break;
case 12:
result = "C";
break;
case 13:
result = "D";
break;
case 14:
result = "E";
break;
case 15:
result = "F";
break;
case 16:
result = "G";
break;
case 17:
result = "H";
break;
case 18:
result = "I";
break;
case 19:
result = "G";
break;
case 20:
result = "K";
break;
case 21:
result = "L";
break;
case 22:
result = "M";
break;
case 23:
result = "N";
break;
case 24:
result = "O";
break;
case 25:
result = "P";
break;
case 26:
result = "Q";
break;
case 27:
result = "R";
break;
case 28:
result = "S";
break;
case 29:
result = "T";
break;
case 30:
result = "U";
break;
case 31:
result = "V";
break;
case 32:
result = "W";
break;
case 33:
result = "X";
break;
case 34:
result = "Y";
break;
case 35:
result = "Z";
break;
}
}
return result;
}
// *****************************十进制到任意进制的转换*****************************
}
package com.Elzsx.Switch;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class Result extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
Intent intent = new Intent();
String Number = intent.getStringExtra("Num");
String FromBinary = intent.getStringExtra("From");
String ToBinary = intent.getStringExtra("To");
TextView result = (TextView)findViewById(R.id.Result_content);
try {
result.setText(Switch(FromBinary,ToBinary,Number));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String Switch(String FromBinary,String ToBinary,String Number)throws Exception{
Calculate cl = new Calculate(FromBinary,ToBinary,Number);
//输入无误
if(!cl.checkInputNumIsOK()){
return "Wrong Input!";
}
String returnLeftPart; //输入数的整数部分
String returnRightPart; //输入数的小数部分
//分别取出数的左面和右面
returnLeftPart = cl.returnWantPart(Number,"left"); //取出输入数的整数部分
returnRightPart = cl.returnWantPart(Number,"right"); //取出输入数的小数部分
String anyChangedToIntSystem; //用于接收输入数的整数部分转换后的结果
String anyChangedToLessSystem; //用于接收输入数的小数部分转换后的结果
anyChangedToIntSystem = cl.intToTenSystem();
anyChangedToLessSystem = cl.lessToTenSystem();
double leftNum = Double.parseDouble(anyChangedToIntSystem);
double rightNum = Double.parseDouble(anyChangedToLessSystem);
double totalNum = leftNum + rightNum; //拼合结果
System.out.println(Number + "由" + FromBinary + "到10进制的结果是:" +
String.valueOf(totalNum));
//十进制到任意进制的转换temToAnySystem_Less
String tenChangedToAnySystemInt = "";
String tenChangedToAnySystemLess = "";
tenChangedToAnySystemInt = cl.tenToAnySystem_Int(anyChangedToIntSystem);
tenChangedToAnySystemLess = cl.tenToAnySystem_Less(anyChangedToLessSystem);
System.out.println(Number + "由" + FromBinary + "到" + ToBinary +
"进制的结果是:" + tenChangedToAnySystemInt + "." + tenChangedToAnySystemLess);
return tenChangedToAnySystemInt + "." + tenChangedToAnySystemLess;
}
}