簡體   English   中英

從Java的String輸入返回數字

[英]Return numbers from String input, Java

我有點被困在這里,並一直試圖弄清楚這一點。 這是家庭作業,盡管我想無論如何都要學習編碼。 在這里,我必須將用戶輸入的字符串轉換為大寫字母,然后使用電話鍵盤系統(2 = ABC等)將那些大寫字母轉換為數字。

我已經走了這么遠,但是不確定下一步應該做什么。 非常感謝任何想法,在此先感謝。

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);
    }
}

要獲取一個char的數字,您可能應該反過來進行數組處理。 您的方法可能如下所示:

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個字母組成的字符串)。

這是整個程序。

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);     
  }
}

String.IndexOf

//不確定在這里做什么

可:

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

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

}

還有許多其他更好的方法可以完成此操作,但這是一種方法。

查看“ Map ,看看是否有任何想法。

    --

  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]);


     }

此問題的完整程序。

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());
    }

}

}

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

最簡單的方法是在String類中使用indexOf()方法,如果所引用的字符串中存在子字符串,則返回值> -1。

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

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

首先,我不會將映射放入方法中,而是放入類本身。 接下來,您可以嘗試使用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 get自動轉換為Character ,反之亦然(例如int <-> Integer )。 這就是為什么在這里使用地圖的原因。

在您的getNumber函數中,您似乎想要遍歷鍵盤陣列。 要提出的邏輯問題是:“在for循環的每個步驟中,您正在尋找什么並且已經完成?”。 例如,假設您的uppecaseLetter為'E'。 然后執行以下步驟:

首先,(i = 0),您什么都不知道,因為未使用鍵盤[0]。

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

接下來,(i = 2)。 Keypad [2] =“ ABC”,但字母為E(並且不在“ ABC”中),因此此處無內容

接下來,(i = 3)。 鍵盤[3] =“ DEF”字母E在這里,所以您知道您可以在此處返回i(i = 3)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM