试图改变两个不同数字的字符位置

时间:2017-06-06 21:09:44

标签: java android

我正在尝试进行一项练习,即“类型2数字和一对位置中的每个角色将其与第二个数字的相同位置中的角色相当,并且在受损位置的角色将它们交换为第一个数字“

的相同位置的字符

但我之前没有使用过角色所以我不确定我做错了什么,这是我到目前为止的代码,它抛出随机的东西而不是数字改变。 到目前为止我有这个代码:

public class MainActivity extends AppCompatActivity {
    EditText edtNum1, edtNum2;
    TextView txvRes;
    Button btnEjecutar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnEjecutar = (Button) findViewById(R.id.btnEjecutar);
        btnEjecutar.setOnClickListener(ButtonClickListener);
    }

    public View.OnClickListener ButtonClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            txvRes = (TextView) findViewById(R.id.txvRes);
            int a, b;
            char[] n1, n2;
            edtNum1 = (EditText) findViewById(R.id.edtNum1);
            edtNum2 = (EditText) findViewById(R.id.edtNum2);
            a = Integer.parseInt(edtNum1.getText().toString());
            b = Integer.parseInt(edtNum2.getText().toString());
            char [] chars1 = String.valueOf(a).toCharArray();
            char [] chars2 = String.valueOf(b).toCharArray();

            if(chars1.length > chars2.length){
                for(int i = 0;i < chars2.length;i++){
                    if(i % 2 != 0){
                        chars2[i] = chars1[i];
                    }else if(i % 2 == 0){
                        chars1[i] = chars2[i];
                    }
                }
            }else if(chars1.length < chars2.length){
                for(int i = 0;i < chars1.length;i++){
                    if(i % 2 != 0){
                        chars2[i] = chars1[i];
                    }else if(i % 2 == 0){
                        chars1[i] = chars2[i];
                    }
                }
            }
            n1 = chars1;
            n2 = chars2;
            txvRes.setText("the first number is: "+n1+" and the second number is: "+n2);
        }
    };}

2 个答案:

答案 0 :(得分:2)

我不确定你在这里要做什么。

  

键入2个数字,奇数位置的每个字符与其交换   等价字符在第二个数字的相同位置,和   奇数位置的字符用它们中的字符交换它们   第一个数字的相同位置

如果您要覆盖奇数仓位甚至仓位,您的结束数字会相同吗?

如果你交换它们将是相同的数字但反转。你会发布你想要实现的输入和输出案例吗?

在任何情况下,您都不需要创建if for length。

        int minLength = Math.min(chars1.length, chars2.length);
        for(int i = 0; i < minLength; i++){
            if(i % 2 == 0){
            } else {
            }
        }

加号模数2只有2个结果,1或0,所以如果在那个条件下你不需要另一个。 同样在你当前的代码中,如果长度相同则不会执行。这可能包括一些边缘情况。

答案 1 :(得分:0)

好吧,我找到了修复它的方法,首先我在setText中使用char数组导致输出一个奇怪的字符串

其次,我基本上改变了函数中的错误值,因为当我改变了第一个时,我正在替换我之前使用的第一个值,这意味着两个数字最终都会使用相同的字符而不是在某些位置交换。

这里是固定代码:

public class MainActivity extends AppCompatActivity {
    EditText edtNum1, edtNum2;
    TextView txvRes;
    Button btnEjecutar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnEjecutar = (Button) findViewById(R.id.btnEjecutar);
        btnEjecutar.setOnClickListener(ButtonClickListener);
    }

    public View.OnClickListener ButtonClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            txvRes = (TextView) findViewById(R.id.txvRes);
            int a, b;
            char[] chars3, chars4;
            edtNum1 = (EditText) findViewById(R.id.edtNum1);
            edtNum2 = (EditText) findViewById(R.id.edtNum2);
            a = Integer.parseInt(edtNum1.getText().toString());
            b = Integer.parseInt(edtNum2.getText().toString());
            char [] chars1 = String.valueOf(a).toCharArray();
            char [] chars2 = String.valueOf(b).toCharArray();
            chars3 = chars1;
            chars4 = chars2;
            if(chars1.length > chars2.length){
                for(int i = 0;i < chars2.length;i++){
                    if(i % 2 != 0){
                        chars2[i] = chars3[i];
                        chars1[i] = chars4[i];
                    }else if(i % 2 == 0){
                        chars1[i] = chars4[i];
                        chars1[i] = chars3[i];
                    }
                }
            }else if(chars1.length < chars2.length){
                for(int i = 0;i < chars1.length;i++){
                    if(i % 2 != 0){
                        chars2[i] = chars3[i];
                        chars1[i] = chars4[i];
                    }else if(i % 2 == 0){
                        chars1[i] = chars4[i];
                        chars2[i] = chars3[i];
                    }
                }
            }
            String c = new String(chars1);
            String d = new String(chars2);
            txvRes.setText("El primer Numero es: "+c+" y el segundo Numero es: "+d);
        }
    };
}