gpt4 book ai didi

java - 我无法计算平均打字速度(每分钟字符数)

转载 作者:行者123 更新时间:2023-12-01 09:09:19 25 4
gpt4 key购买 nike

我无法计算平均打字速度(每分钟字符数)。有时数字太小,有时数字太大。当我在模拟器上运行它时,数字非常小;当我在手机上运行它时,数字非常大。请帮忙。

package com.example.typeit;

import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;

import java.util.Date;

public class MainActivity extends AppCompatActivity {
TextView test, min;
EditText input;
long startTime;
double sTime, tTime;
boolean isStarted;
//ProgressBar progressBar;
int count;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
input = (EditText) findViewById(R.id.input);
min = (TextView) findViewById(R.id.min);
//progressBar = (ProgressBar) findViewById(R.id.progress);

input.setOnKeyListener(keyListener);
isStarted = true;
count = 0;
}

View.OnKeyListener keyListener = new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == event.ACTION_DOWN) {
if (isStarted) {
sTime = new Date().getTime();
isStarted = false;
return false;
}
//if(keyCode == event.KEYCODE_SHIFT_LEFT) return false;
if (Character.isUpperCase(input.getText().charAt(count))) {
if (input.getText().toString().charAt(count) != keyCode + 36) {
min.setText("");
} else {
min.setText("");
}
} else if (Character.isLowerCase(input.getText().charAt(count))) {
if (input.getText().toString().charAt(count) != keyCode + 68) {
min.setText("");
} else {
min.setText("");
}
}
if (keyCode == KeyEvent.KEYCODE_DEL) count--;
else count++;

tTime = (new Date().getTime() - sTime) / 1000 / 60;

int result = (int) (count / tTime);
if (result < 0) result = 0;
// progressBar.setProgress(result);
if (count == input.getText().toString().length()) {
input.setText("");
min.setText("" + result);
}
}
return false;
}
};
}

最佳答案

众所周知,Android 模拟器速度极慢。因此测量打字速度并不准确。

接下来我强烈建议从其余的处理中提取打字率的测量。换句话说:你的 onKey 监听器正在处理很多责任。将计算重构为新类,例如:

class TypeRateCalculator(){
private Date startTime;
private Date elapsedTime;
private int characterCount = 0;

public void startMeasuring() {
startTime = new Date();
}

public int updateTypingRate() {
characterCount++;
elapsedTime = new Date();
long delta = (elapsedTime.getTime() - startTime.getTime()) / 1000 / 60;
int typingRate = Math.max(0, (int) (characterCount/ delta ));
return typingRate;
}
}

然后在 keyListener 中调用 updateTypingRate()。

最后:如果 if 语句与 else 语句执行相同的操作,您可以删除整个分支并直接执行操作:

if (x) {
foo();
}
else {
foo();
}

等同于:

foo()

关于java - 我无法计算平均打字速度(每分钟字符数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41016908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com