2015-09-12 51 views
0

我對Java編程非常陌生,被告知這是一個很棒的網站,可以讓我朝着正確的方向前進。爲什麼我運行程序時顯示代碼中的所有字母級別選項?我只想顯示正確的答案

爲什麼我運行程序時顯示代碼中的所有字母級選項?我只想要顯示正確的一個。請幫忙。

另外,輸入時,如何獲得數值顯示在同一行上,而不是返回到下一行?

感謝您對Java新手的任何幫助和洞察。

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package assignment_1; 

/** 
* 
* @author 
*/ 

import java.util.Scanner; 
public class Assignment_1 
{ 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) 
    { 
     System.out.println("Welcome to the Letter Grade Convertor Program"); 
     System.out.println(); 

     Scanner sc = new Scanner(System.in); 

     String choice = "y"; 
     while (choice.equalsIgnoreCase("y")) 
     { 

      System.out.println("Enter numerical grade: "); 
      int grade = sc.nextInt(); 
      char letter = 0; 
      if(grade <= 100 || grade >= 90) 
       letter = 'A'; 
       System.out.println("Letter grade: " + letter); 
      if (grade <= 89 || grade >= 80) 
       letter = 'B'; 
       System.out.println("Letter grade: " + letter); 

      if (grade <= 79 || grade >= 70) 
       letter = 'C'; 
       System.out.println("Letter grade: " + letter); 

      if(grade <= 69 || grade >= 60) 
       letter = 'D'; 
       System.out.println("Letter grade: " + letter); 

      if(grade < 60 || grade <=0) 
       letter = 'F'; 
       System.out.println("Letter grade: " + letter); 


      System.out.println("Continue? (y/n): "); 
      choice = sc.next(); 
      System.out.println(); 
     } 
    } 
} 
+4

放括號'{}' –

+0

或者,您只需要一個println語句。您可以在if語句中設置該字母,然後在打印「繼續」之前執行'System.out.println(「字母等級:」+字母);'行。 (y/n):'提示。 – stevenc4

+0

查看PrintStream javadoc並注意print(..)和println(..)之間的區別,println(..)會終止這個行,如果你想要在同一行上的東西,它可能不是你想要的行。 – Martin

回答

1

使用的if-else如果獨佔條件塊:

if (grade <= 100 || grade >= 90) { 
    letter = 'A'; 
    System.out.println("Letter grade: " + letter); 
} else if (grade <= 89 || grade >= 80) { 
    letter = 'B'; 
    System.out.println("Letter grade: " + letter); 
} else if (grade <= 79 || grade >= 70) { 
    letter = 'C'; 
    System.out.println("Letter grade: " + letter); 
} else if (grade <= 69 || grade >= 60) { 
    letter = 'D'; 
    System.out.println("Letter grade: " + letter); 
} else if(grade < 60 || grade <= 0) { 
    letter = 'F'; 
    System.out.println("Letter grade: " + letter); 
} 

而這些條件可以被優化如下:

if (grade <= 100 || grade >= 90) { 
    letter = 'A'; 
    System.out.println("Letter grade: " + letter); 
} else if (grade >= 80) { 
    letter = 'B'; 
    System.out.println("Letter grade: " + letter); 
} else if (grade >= 70) { 
    letter = 'C'; 
    System.out.println("Letter grade: " + letter); 
} else if (grade >= 60) { 
    letter = 'D'; 
    System.out.println("Letter grade: " + letter); 
} else if(grade >= 0) { 
    letter = 'F'; 
    System.out.println("Letter grade: " + letter); 
} 

除了上面,對於帝賜的建議,你可以避免重複printlns

if (grade <= 100 || grade >= 90) { 
    letter = 'A'; 
} else if (grade >= 80) { 
    letter = 'B'; 
} else if (grade >= 70) { 
    letter = 'C'; 
} else if (grade >= 60) { 
    letter = 'D'; 
} else if(grade >= 0) { 
    letter = 'F'; 
} else { 
    // If you want to check illegal grade under 0 or over 100 
    // throw new RuntimeException("The grade is out of range!"); 
} 

System.out.println("Letter grade: " + letter); 
+0

您總是打印一個等級,所以您不需要複製此部分 – Dici

+0

@Dici啊,您是對的。 – hata

4

,如果你有一個以上的語句,你應該添加大括號。只有第一條線屬於條件,如果你離開brackets.so南碼始終得到執行。當你添加捲曲剎車時,它是一個塊,它內部的所有線條屬於條件。

if(grade <= 100 || grade >= 90){ 
    letter = 'A'; 
    System.out.println("Letter grade: " + letter); 
} 

是怎麼過的很好的做法,隨時添加大括號

然而由於@dici建議你可以在最後打印品位,而不是添加的out.print內的所有if條件

這樣

public static void main(String[] args) { 
    System.out.println("Welcome to the Letter Grade Convertor Program"); 
    System.out.println(); 

    Scanner sc = new Scanner(System.in); 

    String choice = "y"; 
    while (choice.equalsIgnoreCase("y")) { 

     System.out.println("Enter numerical grade: "); 
     int grade = sc.nextInt(); 
     char letter = 0; 
     if (grade <= 100 || grade >= 90) { 
      letter = 'A'; 
     } 

     if (grade <= 89 || grade >= 80) { 
      letter = 'B'; 
     } 

     if (grade <= 79 || grade >= 70) { 
      letter = 'C'; 
     } 

     if (grade <= 69 || grade >= 60) { 
      letter = 'D'; 
     } 

     if (grade < 60 || grade <= 0) { 
      letter = 'F'; 
     } 
     System.out.println("Letter grade: " + letter); 

     System.out.println("Continue? (y/n): "); 
     choice = sc.next(); 
     System.out.println(); 
    } 
} 
+0

我剛剛發現,較短的答案實際上是一個雙線 – Dici

1

顯示字母等級是因爲您沒有使用括號。

在Java中,如果你不使用你的ifwhile塊括號,只有立即下它被認爲是連接到if/while行。你在做什麼本質上是:

「如果這個檔次的比賽這種情況下,信置這個」,「打印字母」

你應該尋找:「如果這個檔次的條件匹配,將此字母設置爲此並打印字母「,這需要使用括號。

這意味着你想要的代碼是這樣的:

if(grade <= 100 || grade >= 90) { 
    letter = 'A'; 
    System.out.println("Letter grade: " + letter); 
} 
if (grade <= 89 || grade >= 80) { 
    letter = 'B'; 
    System.out.println("Letter grade: " + letter); 
} 

if (grade <= 79 || grade >= 70) { 
    letter = 'C'; 
    System.out.println("Letter grade: " + letter); 
} 

if(grade <= 69 || grade >= 60){ 
    letter = 'D'; 
    System.out.println("Letter grade: " + letter); 
} 

if(grade < 60 || grade <=0){ 
    letter = 'F'; 
    System.out.println("Letter grade: " + letter); 
} 

作爲一般事項:請始終使用括號。

但是,如果你真的不希望使用括號,你可以刪除從每個部分System.out.println("Letter grade: " + letter);線,並把它一度在最後你問權之前Continue (y/n)

1

每個人給了你一個已經有了正確的答案,所以我不會重複括號中的部分。不過,我會告訴你最緊湊的方式(在一般情況下,因爲如果成績是線性的,你可以做短)寫完全相同的邏輯:

int[] intervals = { 60, 70, 80, 90, 100 }; 
char[] grades = { 'E', 'D', 'C', 'B', 'A' }; 
int i = 0; 

while (grade >= intervals[i] && i < intervals.length) i++; 
System.out.println("Letter grade: " + grades[i]); 

你也可以做一些比較模糊的一點但更短:

char[] grades = { 'E', 'D', 'C', 'B', 'A' }; 
System.out.println("Letter grade: " + grades[Math.max(0, (grade - 50)/10)]); 
0

的其他固定的語法,但真快,我想指出的邏輯。

if (grade <= 100 || grade >= 90) { 
letter = 'A'; 

您正在使用「||」運營商是運營商。因此,程序總是會跳出if else語句,因爲等級總是低於100.你可以放5,它會說A.不應該是「& &」,這樣它會檢查範圍你要? 讓我知道,如果我失去了一些東西。

相關問題