2015-10-20 92 views
2

給出3個整數,abc,和布爾equalOK打印"Strictly Increasing Order"如果abc是嚴格遞增的順序,如2 5 11,或5 6 7,但不6 5 75 5 7。但是,如果"equalOk"true,則允許相等,例如5 5 75 5 5 print "Increasing Order"。否則打印"Not in order"秩序的三個整數

這是我到目前爲止有:

import java.util.*; 
public class Problem8 
{ 

    public static void main(String[] args) 
    { 
     Scanner scan = new Scanner(System.in); 

     int a = scan.nextInt(); 
     int b = scan.nextInt(); 
     int c = scan.nextInt(); 

     boolean equalOK = true; 
     equalOK = scan.nextBoolean(); 

     if(c > b && c > a && b > a) 
     { 
      System.out.println("Strictly Increasing Order"); 
     } 
     else if((a == b && c > b && equalOK) || (b == c && c > a && equalOK) || (a == b && b == c && equalOK)) 
     { 
      System.out.println("Increasing Order"); 
     } 
     else 
     { 
      System.out.println("Not in Order"); 
     } 
    } 

} 

當我提出這一個網上法官它給了我一個分數的21/100

有什麼問題嗎?

+0

是什麼'嚴格遞增Order'和'增加Order'之間的區別? –

+0

我想這意味着嚴格遞增順序是三個整數彼此不同時,而遞增順序是至少兩個相同。 – Kj45

+0

嚴格意義上,數字不能相等。 – annoirq

回答

1

看來你的代碼正在處理正確的每一個案例,所以問題必須在其他地方。

因爲平等是允許如果equalOKtrue,病情可以更簡單地寫成:

else if(equalOK && c >= b && c >= a && b >= a) 
{ 
    System.out.println("Increasing Order"); 
} 

這是相同的條件"Strictly Increasing Order"但允許平等。

你的代碼期望掃描器閱讀以下的令牌(例如)5 5 7 true使得a=5b=5c=7equalOK=true

+0

這是否會產生與OP已有的結果不同的結果?或者你的意思是由於代碼的複雜性,裁判會降低分數? – Codebender

+0

@Codebender其實,我重新檢查過,它似乎是一樣的(雖然寫得更簡單)。我現在認爲這個問題來自掃描儀正在讀取的數據(沒有格式化爲OP讀取它),因此我的編輯。 – Tunaki

+0

問題在這裏,而不是(b == c && c> a && equalsOK)應該是(b == c && b> a && equalOK) – annoirq

0

該代碼可以由更簡單:

if(c > b && b > a) { 
     System.out.println("Strictly Increasing Order"); 
    } 
    else if (c >= b && b >= a && equalOK) 
    { 
     System.out.println("Increasing Order"); 
    } else { 
     System.out.println("Not in Order"); 
    } 

你不需要託運三個不平等,因爲>關係是可傳遞(即,如果C> B和B> A則c>一) 。而不是檢查等於"Increasing Order",請使用>=

+0

感謝您的提示!雖然我的分數仍然是21!我不明白這一點! – Kj45

+0

@HovigArtinian也許你誤解了需求。 – Eran

0

使用,此代碼:

else if(equalOK && c >= b && b >= a) 
{ 
    System.out.println("Increasing Order"); 
} 

在你的代碼的問題,而不是:

(b == c && c > a && equalOK) 

使用

(b == c && b > a && equalOK) 
0

我想這這種情況是足夠(a <= b && c >= b && equalOK) 你可以找到後文全文

import org.junit.Test; 

import java.util.Random; 


public class Order { 


@Test 
    public void order() 
    { 
     int max=4; 
     Random r= new Random(); 
     int a = r.nextInt(max); 
     int b = r.nextInt(max); 
     int c = r.nextInt(max); 
     System.out.println("a ,b ,c "+a +","+b+","+c); 

     boolean equalOK = false; 

     System.out.println("equal OK "+equalOK); 
     checkOrder(a, b, c, equalOK); 

     equalOK = true; 
     System.out.println("equal OK "+equalOK); 
     checkOrder(a, b, c, equalOK); 
    } 

private void checkOrder(int a, int b, int c, boolean equalOK) { 
    if(c > b && b > a) 
    { 
     System.out.println("Strictly Increasing Order"); 
    } 
    else if((a <= b && c >= b && equalOK)) 
    { 
     System.out.println("Increasing Order"); 
    } 
    else 
    { 
     System.out.println("Not in Order"); 
    } 
} 

}

-1
if((a == b && c > b && equalOK) || (b == c && c > a && equalOK) || (a == b && b == c && equalOK)) 
      { 
       System.out.println("Increasing Order"); 
      } 
      else if(c > b && b > a) 
      { 
       System.out.println("Strictly Increasing Order"); 
      } 

      else 
      { 
       System.out.println("Not in Order"); 
      }