在下面包含switch语句的代码中,是否可以合并equalsIgnoreCase方法,即,无论是否输入a或A,用户都会收到成绩消息,等等。
我设法通过使用“将用户输入转换为大写”方法来获得正确的结果,但是我很好奇是否可以在这里使用ignoreCase方法。我尝试这样做,但是它似乎没有任何作用,可能是因为ignoreCase是一个布尔值,它返回true / false结果,而不是消息。我尝试对此进行研究,但所有在线结果均建议使用toUpperCase方法,这是我已经尝试并工作的方法。
private BluetoothGattCallback bleGattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
gatt.discoverServices();
super.onConnectionStateChange(gatt, status, newState);
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
BluetoothGattService service = gatt.getService(UUID_Service);
BluetoothGattCharacteristic charc= service.getCharacteristic(UUID_characteristic);
gatt.writeCharacteristic(charc);
super.onServicesDiscovered(gatt, status);
}
@Override
public void onCharacteristicRead(BluetoothGatt gatt, final BluetoothGattCharacteristic characteristic, int status) {
super.onCharacteristicRead(gatt, characteristic, status);
}
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
BluetoothGattService service = gatt.getService(UUID_Service);
int data1 = 02;
int data2 = 40;
int data3 = 0;
data1 = BluetoothGattCharacteristic.FORMAT_UINT8;
data2 = BluetoothGattCharacteristic.FORMAT_UINT8;
data3 = BluetoothGattCharacteristic.FORMAT_UINT8;
byte[] value = new byte[]{(byte)data1 , (byte)data2 ,(byte)data3};
characteristic.setValue(value);
characteristic.setWriteType(BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,"completed!", Toast.LENGTH_SHORT).show();
}
});
super.onCharacteristicWrite(gatt, characteristic, status);
}
};
答案 0 :(得分:3)
您可以switch (gradeLetter.toUpperCase())
,但是对我来说,这似乎是Map<String, String>
更好的用例。像
Scanner scan = new Scanner(System.in);
Map<String, String> map = new HashMap<>();
map.put("A", "Excellent!");
map.put("B", "Good job.");
map.put("C", "You passed");
map.put("D", "You can do better.");
map.put("F", "You failed.");
// ... No Loop?
System.out.println("Please enter grade.");
String gradeLetter = scan.next();
System.out.println(map.getOrDefault(gradeLetter.toUpperCase(),
String.format("%s is invalid.", gradeLetter)));
答案 1 :(得分:2)
如前所述,您可以打开gradeLetter.toUpperCase()
。
您还可以使用穿透,其中多个大小写标签跳转到同一代码块:
switch (gradeLetter) {
case "A":
case "a":
message = "Excellent!";
break;
case "B":
case "b":
message = "Good job.";
break;
/* etc */
例如,考虑“ a”和“ A”。 break
之后没有case "A":
语句,因此执行直接进入case "a":
块。