我刚刚开始使用android studio,目前我正在开发一个罗马数字翻译应用程序。该应用程序的界面如下所示:Application interface
用户将使用键盘输入一个整数,该整数将显示在上面显示的TextView上。当他们点击转换按钮时,它将获取他们输入的整数并将其转换(如果包含字符串或字符,程序将能够捕获输入)。然后,在用户点击“转换”按钮后,应用程序会将TextView重置为结果。
目前,我的主要活动包含按钮的onClickListeners和翻译的单独翻译方法。我的问题是“转换”按钮我不知道如何从转换器方法获取输入并在完成转换时将其设置为TextView。以下是我的代码示例:
“转换”按钮监听器 - “
convert.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
TextView numeralInput = (TextView) findViewById(R.id.textView);
String intValue = numeralInput.getText().toString();
try{
int integer = Integer.parseInt(intValue);
if (integer > 0 && integer <= 4999){
translator(integer);
}else{
numeralInput.setText("Please enter an integer between 0 and 4,999.");
}
}catch(NumberFormatException e){
numeralInput.setText("Invalid input try again.");
}
}
}
);
`
翻译方法 -
public static void translator(int integer) {
LinkedList<String> stack = new LinkedList<String>();
// if (integer > 0 && integer <= 4999) {
//ArrayList<Integer> placement = new ArrayList<Integer>();
int place = (int) Math.log10(integer);
for (int i = 0; i <= place; i++) {
//while(integer > 0){
//System.out.println(integer);
int placeOfValue = integer % 10;
//stack.push(placeOfValue);
//System.out.print(stack);
//System.out.print(placeOfValue +":" + i);
String placement = "";
switch (i) {
case 0:
placement = ones(placeOfValue);
break;
case 1:
placement = tens(placeOfValue);
break;
case 2:
placement = hundreds(placeOfValue);
break;
case 3:
placement = thousands(placeOfValue);
break;
default:
break;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
stack.push(placement);
}
integer = integer / 10;
//System.out.print(placement);
// System.out.println(placement.size());
//}
// for(int j = 0; j < placement.size(); j++){
// double tenthPower = Math.floor(Math.log10(placement.get(j)));
// double place = Math.pow(10, tenthPower);
// System.out.println(place);
//
// }
// }
while (!stack.isEmpty()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
System.out.print(stack.pop());
}
}
// } else {
// System.out.println("Please enter an integer between 0 and 4,999.");
// }
}
}
`
翻译器中的其他方法就像一个罗马数字库,每个方法都包含每个地方值的数字,如下所示。
千种方法 - “
public static String thousands(int integer) {
String thouValue = "";
switch (integer) {
case 1:
thouValue = "M";
//System.out.print("M");
break;
case 2:
thouValue = "MM";
//System.out.print("MM");
break;
case 3:
thouValue = "MMM";
//System.out.print("MMM");
break;
case 4:
thouValue = "MMMM";
//System.out.print("MMMM");
break;
default:
thouValue = "";
break;
}
return thouValue;
}
`
答案 0 :(得分:2)
使translator()
方法返回包含最终输出的字符串。
所以在该方法的while
语句之前,声明一个字符串,如
String result = null;
并在循环中将弹出的值附加到此变量,例如result += stack.pop()
。
现在,您调用translator(integer)
方法的地方,numeralInput.setText(translator(integer))
代替translator(integer)
答案 1 :(得分:2)
您需要将TextView作为类成员并在您的oncreate包中初始化它,以便您可以访问活动中其他位置的textview。
TextView numeralInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_main);
numeralInput = (TextView) findViewById(R.id.textView);
convert.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
String intValue = numeralInput.getText().toString();
try{
int integer = Integer.parseInt(intValue);
if (integer > 0 && integer <= 4999){
translator(integer);
}else{
numeralInput.setText("Please enter an integer between 0 and 4,999.");
}
}catch(NumberFormatException e){
numeralInput.setText("Invalid input try again.");
}
}
}
);