【问题标题】:Byte to compare with integer [closed]与整数比较的字节[关闭]
【发布时间】:2012-05-08 14:38:53
【问题描述】:

我正在尝试将我保存在 A 文件中的高分与整数进行比较。所以我总是会从我的文件中得到三个字符,但是如果我控制它,它不会把我的新分数放进去。

try{
                String FILENAME = "HanoiScore1File";
                FileInputStream fos = openFileInput(FILENAME);
                byte[] b = new byte[2];
                fos.read(b);
                fos.close();
                Data = new String(b);
                Score2 = Integer.parseInt(Data);
            }catch (java.io.FileNotFoundException e) {
              } catch (IOException e) {
                e.printStackTrace();
            }
            if(Score2>Score){
                try{
                    String FILENAME="HanoiScore1File";
                    Data=Integer.toString(Score);
                    FileOutputStream fostemp = openFileOutput(FILENAME, Context.MODE_PRIVATE);
                    fostemp.write(Data.getBytes());
                    fostemp.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

【问题讨论】:

  • 代码byte[] b = new byte[2]; fos.read(b); 仅从文件中读取 2 个字节,而不是您在问题中写的 3 个字节。另外,文件的当前内容是什么?您将其与哪个“高分”进行比较?
  • 这只是一个类型错误,因为在另一个文件中它的 3 个字节。我比较的高分是Score,而Score2中的高分来自文件
  • 文件“HanoiScore1File”的当前内容是什么?你能发一下吗?此外,只需添加一些调试日志,以便在比较之前查看“Score2”和“Score”的值。
  • 解决了它是答案的组合,以及我自己的愚蠢错误。我发布了一个答案

标签: android integer compare byte


【解决方案1】:

如果您真的关心将分数存储为两个字节以节省空间,则需要结合使用位移和按位运算符,例如:

    int score = 2839;
    byte a = (byte)(score & 255);
    byte b = (byte)(score >> 2);

但是,如果你对空间比较宽容,你可以做一些简单的事情,比如:

    String FILENAME = "HanoiScore1File";

    //Read the score
    Scanner scanner = new Scanner(new File(FILENAME));
    int Score = scanner.nextInt();
    scanner.close();

    //Write the score
    PrintWriter printWriter = new PrintWriter(new File(FILENAME));
    printWriter.println(Score);
    printWriter.close();

【讨论】:

  • 我尝试了第二种方法,因为我不担心空间问题。分数第一次是A 0,但它一直是A 0,它永远不会改变。
【解决方案2】:
String FILENAME = "HanoiScore1File";

//Read the score
Scanner scanner = new Scanner(new File(FILENAME));
int Score = scanner.nextInt();
scanner.close();

//Write the score
PrintWriter printWriter = new PrintWriter(new File(FILENAME));
printWriter.println(Score);
printWriter.close();

这可行,但我犯的错误是

if (Score2>Score)

Score2一直是0,永远不会大于Score,所以没有保存高分。

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多