我正在Ruby编写一个简单的小程序,根据用户输入输出数字的序数。这是我写的:
class Task extends SwingWorker<Void, Void> {
@Override
public Void doInBackground() {
int progress = 0;
setProgress(0);
while (progress < 100 && !isCancelled())
{
functionA();
try {
Thread.sleep(1000);
}catch(InterruptedException ex) {
ex.printStackTrace();
}
progress += 25;
setProgress(Math.min(progress, 100));
taskOutput.setText("Step 2");
functionB();
progress += 25;
setProgress(Math.min(progress, 100));
try {
Thread.sleep(1000);
}catch(InterruptedException ex) {
ex.printStackTrace();
}
taskOutput.setText("Step 3");
functionC();
progress += 25;
setProgress(Math.min(progress, 100));
try {
Thread.sleep(1000);
}catch(InterruptedException ex) {
ex.printStackTrace();
}
taskOutput.setText("Step 4");
functionD();
try {
Thread.sleep(1000);
}catch(InterruptedException ex) {
ex.printStackTrace();
}
progress += 25;
setProgress(Math.min(progress, 100));
}
return null;
}
正如我的代码所示,我想从用户输入中取出“数字”,切断最后一个数字,并使用该单个数字来确定“数字”是否应该是(冷杉)st,(seco) nd,(thi)rd,或(第四种)序数。 “转换”值应该为我转换。但是,可以看出数字11,12和13是例外。我的程序运行正常,但是当我输入这三个值中的一个时,我在终端中得到两个结果,而不是一个,例如:
puts "Enter a number"
number = gets.chomp.to_i
conversion = number % 10
if number == 11 || number == 12 || number == 13
puts "That is #{number}th"
end
if conversion == 1
puts "That is #{number}st"
elsif conversion == 2
puts "That is #{number}nd"
elsif conversion == 3
puts "That is #{number}rd"
else
puts "That is #{number}th"
end
我的意图是应该显示“第11个”,而不是“第11个”。即使我试图在我的代码中写一个异常,“转换”仍然会被执行。我不确定我犯了什么错误,但有没有办法隔离第一个if语句,以便我的转换不包括11,12和13?