2016-02-06 51 views
-2

我想讓用戶輸入一個字母,然後將字母及其在字母表中的位置打印出來。如果輸入的不是字母,我希望程序打印:"Not valid"從用戶處獲得信件並在字母表中打印出其字母的位置

我該怎麼做?

編輯 - 對不起,我沒有反應,我其實前幾天就明白了這一點。繼承人的實際代碼,但:

import java.util.Scanner; 

public class AlphaPos { 
    public static void main(String[] args) { 
    java.util.Scanner input = new java.util.Scanner(System.in); 
     System.out.println(" Please enter an upper or lowercase letter. "); 
      String letter = input.nextLine(); 

      String alpha = " abcdefghijklmnopqrstuvwxyz"; 
      String beta = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

     if((!alpha.contains(letter))&&(!beta.contains(letter))) 
       System.out.println(" You entered " +letter+ ", and you obviously can't follow directions."); 

     boolean hasUppercase = !letter.equals(letter.toLowerCase()); { 
      if (hasUppercase) 
       System.out.println("Your letter is " +letter+ ", Uppercase, and its number is "+ beta.indexOf(letter)); 

     boolean hasLowercase = !letter.equals(letter.toUpperCase()); 
      if (hasLowercase) 
       System.out.println("Your letter is " +letter+ " ,lowercase , and its number is "+ alpha.indexOf(letter)); 
                     } 

    } 
} 

學校的任務,所以這段代碼沒有任何目的。無論如何,感謝所有的反應!

+0

告訴我們你有什麼嘗試,什麼不工作。 –

+0

請顯示您的代碼,這將更容易看到問題的具體位置,謝謝。歡迎來到StackOverflow! – plamut

+0

投票結束時間太長,因爲OP沒有顯示任何內容,因此也沒有收到任何細節 – Drew

回答

1

這是第一個想到我的想法:

char c = ... 
if(!Character.isLetter(c)) { 
    return "Not valid!"; 
} else { 
    System.out.println("Letter:"+c+", position: "+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(c)); 
} 
+0

也許'toUpperCase(c)'at結束? –

+1

這個答案是錯誤的。 ['Character.isLetter'](https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#isLetter-char-)讓我們通過除A-Z之外的其他字符。硬編碼字母上的'indexOf'不是很好,只需要對'char'值做一個簡單的計算。另外,爲什麼你認爲輸入是大寫?爲什麼一個代碼路徑返回一個值,而另一個代碼路徑正在打印某些內容? – Tunaki

2

我簡單的測試驗證了該工程採取的事實,char值也評估,以ASCII int值優勢,所以你可以做一些簡單的數學作爲所示。

英文字母有26個可能的位置,所以if條件檢查是否超出範圍。

char c = 'd'; // Replace with user input like Scanner#next() or something 

// output: 'A' = 1, 'Z' = 26 
int position = (Character.toUpperCase(c) - 'A' + 1); 

if (position < 1 || position > 26) { 
    System.out.println("Not valid"); 
} else { 
    System.out.println(String.format("Character: %s\nPosition: %d", c, position)); 
} 

輸出

Character: d 
Position: 4 
0

也許不是最快的方式,但強大和易於理解:

public class Example { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 
     while (true) { 
      String input = sc.nextLine(); 
      if (input.matches("[a-zA-Z]")) { 
       System.out.println(input); 
       char c = input.toLowerCase(Locale.ENGLISH).charAt(0); 
       System.out.println(c - 96); 
      } 
      else 
       System.out.println("Not valid"); 
     } 
    } 
} 

我使用正則表達式來檢查,如果輸入的是一個單個字符英文字母,小寫或大寫。如果是,則打印。爲了獲得字母表中的位置,我將它轉換爲小寫字母(因爲大寫和小寫都具有相同的位置),並將其值減去int的值,以便將a歸一化爲1

該循環只是爲了方便測試。

感謝cricket_007和Tunaki提高答案(詳見修訂版)。