2011-09-26 51 views
0

我有點難倒在這裏,一直試圖找出一段時間。這是作業,儘管我想學習編碼。在這裏,我必須將用戶輸入的字符串轉換爲大寫字母,然後使用電話鍵盤系統將這些大寫字母轉換爲數字(2 = ABC等)。從字符串輸入返回數字,Java

我已經得到了這麼多,但我不確定我的下一步應該是什麼。任何想法都非常感謝,提前感謝。

package chapter_9; 

import java.util.Scanner; 

public class Nine_Seven { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter a string: "); 
     String s = input.next(); 

     // unsure what to do here, know i need some sort of output/return 
     // statement 
    } 

    public static int getNumber(char uppercaseLetter) { 
     String[] Keypad = new String[10]; 
     Keypad[2] = "ABC"; 
     Keypad[3] = "DEF"; 
     Keypad[4] = "GHI"; 
     Keypad[5] = "JKL"; 
     Keypad[6] = "MNO"; 
     Keypad[7] = "PQRS"; 
     Keypad[8] = "TUV"; 
     Keypad[9] = "WXYZ"; 

     for (int i = 0; i < Keypad.length; i++) { 
      // unsure what to do here 
     } 

     return (uppercaseLetter); 
    } 
} 
+0

Java沒有'foreach'嗎? – nmichaels

+0

@nmichaels:它對某些事情有用(查找'Iterator'),但這對於這項任務來說是一種矯枉過正。 –

+0

@nmichaels它的確如此,但代碼表明OP希望返回foreach循環中不可用的索引變量。 –

回答

6

要得到一個字符的數字,你應該反過來做你的數組。你的方法看起來是這樣的:

public static int getNumber(char uppercaseLetter) { 
    int[] keys = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9}; 
    return keys[(int)uppercaseLetter - 65]; //65 is the code for 'A' 
} 

它也可能是一個好主意,在keys陣列拉入該類的成員變量,這樣你就不會初始化它在每次調用。

至於輸出/轉換,我建議你看看java.lang.System類。另外請注意,您還沒有將字符串轉換爲大寫字母 - 並且沒有檢查輸入的有效性(它是由26個字母組成的字符串)。

+0

謝謝,雖然在返回語句中添加了65,但我有點困惑嗎? – Gmenfan83

+0

@Jason:65條評論的理由。 'A'的ASCII碼是65. – Mohayemin

+0

好的,再次感謝你。 – Gmenfan83

1

調查Map,看看它是否給你任何想法。

0

您的要求似乎是在鍵盤陣列中找到輸入的字符。

這樣做的天真方法是在String類中使用indexOf()方法,如果引用字符串中存在子字符串,則該方法返回大於-1的值。

因此"ABC".indexOf("A")會返回0,"ABC".indexOf("C")會返回2,而"ABC".indexOf("D")會返回-1;

使用for循環尋址小鍵盤數組中的每個字符串,並使用上述方法檢查輸入的字符是否映射到當前選擇。

+1

請注意'Keypad [0]'和'Keypad [1]'從不初始化,因此'null'。 – Thomas

+0

好點,我沒有注意到。 – mcfinnigan

0

首先,我不會將映射放入方法中,而是放入類中。接下來,你可以嘗試和使用Map<String, Integer>這樣的:

Map<Character, Integer> charToNum = new HashMap<Character, Integer>(); 
charToNum.put('A', 2); 
charToNum.put('B', 2); 
charToNum.put('C', 2); 
charToNum.put('D', 3); 
... 

然後,如果您需要獲得字符數,只要致電:

public static int getNumber(char uppercaseLetter) { 
    return charToNum.get(uppercaseLetter); 
} 

注意,我利用汽車的(未)拳擊在這裏:char得到的自動轉換爲Character,反之亦然(如int < - >Integer)。這就是爲什麼使用地圖在這裏工作。

2

String.IndexOf

//不確定在這裏做什麼

可以是:

for(int i = 2;i < Keypad.length;i++) { 

    if(Keypad[i].indexOf(uppercaseLetter) != -1) 
    { 
     return i; 
    } 

} 

還有許多其他的,更好的方法來做到這一點,但是這是一種方式。

0

在你的getNumber函數中,它看起來像你想通過你的鍵盤陣列。要問的邏輯問題是:「在for循環的每一步,你在找什麼,你做了什麼?」。例如,假設你的uppecaseLetter是'E'。然後通過以下步驟:

首先,(i = 0),由於鍵盤[0]未使用,所以您不知道任何事情。

接下來,(i = 1)。仍然沒有,因爲鍵盤[1]未使用

接下來,(i = 2)。鍵盤[2] =「ABC」,但字母是E(並且它不在「ABC」中),因此這裏沒有任何內容

next,(i = 3)。鍵盤[3] = 「DEF」 字母E是在這裏,所以你知道你能回到我(I = 3)這裏

0
    -

  1. 列表項

//不確定該做什麼,知道我需要某種輸出/返回

//陳述

 char ch[]=s.toCharArray(); 


    int n[]=new int[s.length()]; 


    for(int i=0;i<ch.length;i++) 


    { 

     n[i]= getNumber(ch[i]); 

     System.out.print(n[i]); 


    } 
2

這是整個程序。

public class Mobile Key Pad{ 

public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter a string: "); 
     String s = sc.next();  
     char ch[]=s.toCharArray(); 
     int n[]=new int[s.length()]; 

     for(int i=0;i<ch.length;i++)  
     { 
      n[i]= getNumber(ch[i]); 
      System.out.print(n[i]); 
     } 
    } 

    public static int getNumber(char uppercaseLetter) { 
     String[] Keypad = new String[10]; 
     Keypad[2] = "ABC"; 
     Keypad[3] = "DEF"; 
     Keypad[4] = "GHI"; 
     Keypad[5] = "JKL"; 
     Keypad[6] = "MNO"; 
     Keypad[7] = "PQRS"; 
     Keypad[8] = "TUV"; 
     Keypad[9] = "WXYZ"; 

      for(int i = 2;i < Keypad.length;i++) 
      { 
       if(Keypad[i].indexOf(uppercaseLetter) != -1) 
       { 
        return i; 
       } 
      } 
     return (uppercaseLetter);  
    } 
} 
0

這個問題的完整程序。

import java.util.Scanner; 

public class PhonePad { 

public static void main(String[] args) { 
    System.out.println("Mobile Phone key Pad (Considering 2 to 9 as keys)"); 
    System.out.println("Enter the Switch Number" 
      + " 1st and no of times it got pressed " 
      + "\n Press any word to exit"); 
    StringBuilder str = new StringBuilder(); 

    try { 
     while (true) { 
      Scanner s = new Scanner(System.in); 
      int swNum = s.nextInt(); 
      int no = s.nextInt(); 
      if ((swNum > 9 ||swNum <2) ||(no > 4||no <1)) 
       break; 
      else if ((swNum>7&&swNum<10) || (swNum >1 &&swNum<7) 
        || (swNum ==7 && no ==4)){ // 7 has PQRS 
       if(swNum > 7){ 
        no++; 
       } 
       int temp = swNum * 3 + (no - 1) + 59; 
       System.out.println("Entered char is "+(char) temp); 
       str.append((char) temp); 
      } else 
       break; 
     } 
    } catch (Exception e) { 
     System.out.println("Exiting terminal"); 
    } finally { 
     System.out.println("Thanks for using my Keypad... visit again"); 
     System.out.println("Entered keyword is " + str.toString()); 
    } 

} 

}