【问题标题】:Button text and string from text file (from asset) should be the same, but not in Android来自文本文件(来自资产)的按钮文本和字符串应该相同,但在 Android 中不同
【发布时间】:2013-04-23 14:46:44
【问题描述】:

我想做一个测验程序。问题位于资产文件夹中的文本文件中。答案也在名为问题编号的资产文件夹中(例如:第一个问题的答案在名为 1 的文本文件中)。我想随机给出问题和答案(按钮的答案)。直到这一切都很好(也许不是最短的解决方案,但效果很好)。然后用户可以点击正确的按钮回答问题。这就是问题所在。我得到按钮的文本和答案文件的第一行(第一行总是答案文本文件中的正确答案)。应该是一样的,然后我签字,这是正确答案。但它不一样,我不知道为什么。从答案文件中将文本放入按钮并从答案文件中获取第一行,因此应该相同。我把它打印出来记录猫,看起来它们是一样的。我不知道可能出了什么问题。 谁能帮帮我。

这是我设置按钮文本(随机)并比较第一行和按钮文本的地方:

BufferedReader br2 = new BufferedReader(is2, 8192);

                        for(int k2=0; k2<3; k2++){
                            try {
                                kerdes2[k2] =  br2.readLine();
                                final ArrayList <Integer> kerdesno2 = new ArrayList<Integer>();
                                for(int j=0;j<3;j++) kerdesno2.add(j);
                                Collections.shuffle(kerdesno2);
                                System.out.println(kerdesno2);
                                answ.setText(kerdes2[kerdesno2.get(0)]);
                                answ2.setText(kerdes2[kerdesno2.get(1)]);
                                answ3.setText(kerdes2[kerdesno2.get(2)]);
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                            answ.setOnClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                    // TODO Auto-generated method stub
                                    InputStreamReader is3 = null;
                                    try {
                                        is3 = new InputStreamReader(am.open(i3), "ISO-8859-1");
                                    } catch (UnsupportedEncodingException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                    BufferedReader br3 = new BufferedReader(is3, 8192);
                                    try {
                                        String helyes = br3.readLine();
                                        System.out.println(helyes);
                                        String gomb = answ.getText().toString();
                                        System.out.println(gomb);

                                        for(int f=0; f<helyes.length(); f++)
                                        {
                                            char c = helyes.charAt(f);
                                            char d = gomb.charAt(f);
                                            if(c != d){
                                                System.out.println(c);
                                                System.out.println(((String) gomb).indexOf(c));
                                            }
                                        }

                                        if(gomb == helyes)                                  
                                        {
                                            x++;
                                            TextView eredmeny = (TextView)findViewById(R.id.eredmeny);
                                            eredmeny.setText("Eredményed: " + Math.round(x*100/i2) + "%");
                                        }
                                        else
                                        {
                                            TextView eredmeny = (TextView)findViewById(R.id.eredmeny);
                                            eredmeny.setText(gomb + " = " + helyes);
                                        }
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                }
                            });

                            answ2.setOnClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                    // TODO Auto-generated method stub
                                    InputStreamReader is3 = null;
                                    try {
                                        is3 = new InputStreamReader(am.open(i3), "ISO-8859-1");
                                    } catch (UnsupportedEncodingException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                    BufferedReader br3 = new BufferedReader(is3, 8192);
                                    try {
                                        String helyes = br3.readLine();
                                        System.out.println(helyes);
                                        String gomb = answ2.getText().toString();
                                        System.out.println(gomb);
                                        if(gomb == helyes)                                          
                                        {
                                            x++;
                                            TextView eredmeny = (TextView)findViewById(R.id.eredmeny);
                                            eredmeny.setText("Eredményed: " + Math.round(x*100/i2) + "%");
                                        }
                                        else
                                        {
                                            TextView eredmeny = (TextView)findViewById(R.id.eredmeny);
                                            eredmeny.setText(gomb + " = " + helyes);
                                        }
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                }
                            });

                            answ3.setOnClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                    // TODO Auto-generated method stub
                                    InputStreamReader is3 = null;
                                    try {
                                        is3 = new InputStreamReader(am.open(i3), "ISO-8859-1");
                                    } catch (UnsupportedEncodingException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                    BufferedReader br3 = new BufferedReader(is3, 8192);
                                    try {
                                        String gomb = answ3.getText().toString();
                                        String helyes = br3.readLine();
                                        System.out.println(gomb);
                                        System.out.println(helyes);
                                        if(gomb == helyes){
                                            x++;
                                            TextView eredmeny = (TextView)findViewById(R.id.eredmeny);
                                            eredmeny.setText("Eredményed: " + Math.round(x*100/i2) + "%");
                                        }
                                        else
                                        {
                                            TextView eredmeny = (TextView)findViewById(R.id.eredmeny);
                                            eredmeny.setText(gomb + " = " + helyes);
                                        }
                                    } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                    }
                                }
                            });

如您所见,我尝试遍历这两个字符串以找出问题所在,但我无法找到...

【问题讨论】:

    标签: android string gettext readline settext


    【解决方案1】:

    字符串是一个对象。比较对象时,使用 .equals(),而不是 ==。

    您的代码:

    if(gomb == helyes)
    

    应该是:

    if(gomb.equals(helyes))
    

    通过使用 == 您正在比较内存,而不是实际的 String 对象。有时你会得到预期的结果,但有时你不会。 .equals() 将始终测试字符串本身。

    【讨论】:

    • 这是一个简单但很棒的解决方案!非常感谢它,它现在运行良好!
    • 只是为了让事情更清楚,如果你有 str1 = "attila" 和 str2 = "attila" == 如果 str1 和 str2 都指向持有 "attila" 的相同内存地址,比较将返回 true但是您不能保证地址相同,即使字符串相同。 .equals() 比较比较实际的字符串。经验法则总是 .equals() 用于对象,== 用于原始类型。
    【解决方案2】:

    我可以看到你在比较

    if(gomb == helyes){
    

    应该是的

    if(gomb.equals(helyes)){
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      相关资源
      最近更新 更多