Ruby if / elseif编码错误

时间:2015-05-10 15:12:46

标签: ruby if-statement

我正在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?

0 个答案:

没有答案