0

The goal of the program is to make it take a phone number like 1-800Flower and make it change it into the number equivalent to a phone keypad like 1-8003569377 I can't seem to get the conversion from letter to number correct.

import java.util.Scanner;  
public class Phonekeypad 
{
  public static int getNumber (char uppercaseLetter)
  {  
     int k = 0;
     switch (uppercaseLetter) 
     {
        case 65: k = 2;
        break;
        case 66: k = 2;
        break;
        case 67: k = 2;
        break;
        case 68: k = 3;
        break;
        case 69: k = 3;
        break;
        case 70: k = 3;
        break;
        case 71: k = 4;
        break;
        case 72: k = 4;
        break;
        case 73: k = 4;
        break;
        case 74: k = 5;
        break;
        case 75: k = 5;
        break;
        case 76: k = 5;
        break;
        case 77: k = 6;
        break;
        case 78: k = 6;
        break;
        case 79: k = 6;
        break;
        case 80: k = 7;
        break;
        case 81: k = 7;
        break;
        case 82: k = 7;
        break;
        case 83: k = 7;
        break;
        case 84: k = 8;
        break;
        case 85: k = 8;
        break;
        case 86: k = 8;
        break;
        case 87: k = 9;
        break;
        case 88: k = 9;
        break;
        case 89: k = 9;
        break;
        case 90: k = 9;
        break;        
    }
     return k;
  }


public static void main(String[] args) 
{ 
     String s;
     System.out.println("Enter a string: ");
     Scanner input = new Scanner(System.in);
     s = input.next().toUpperCase();
     for (int i=0; i<s.length(); i++)
     {
         char c = s.charAt(i);
        // Is this a letter?
         if (Character.isLetter(c))
         { 
            int n;
            n = getNumber(c);
            char cn = 0;
            switch (n)
            {
             case 2: cn = '2';
             break;
             case 3: cn = '3';
             break;
             case 4: cn = '4';
             break;
             case 5: cn = '5';
             break;
             case 6: cn = '6';
             break;
             case 7: cn = '7';
             break;
             case 8: cn = '8';
             break;
             case 9: cn = '9';
             break;
            }
            s.replace(c, cn);
         }
     }
         System.out.println(s);
    }
}
4

2 に答える 2

2

変更する必要があります

   s.replace(c, cn);

 s = s.replace(c, cn);

そうしないと、文字列sは更新されません。この背後にある理由は、Java ではすべての文字列が不変 (つまり、変更できない) であるためです。文字列を「変更」するたびに、実際に行っているのは、2 つの文字列を作成し、それらの参照を交換することです。replace() はこれを認識しています。そのため、パラメーターとして渡された文字列は変更されません。代わりに、replace() は、文字列「s」を置換した文字列で表す新しい文字列を返します。

于 2012-11-29T22:16:02.490 に答える
0

dreamcrash のソリューションを確認してください。これとは関係ありませんが、case ステートメントを組み合わせることでコードの一部を簡素化できます。たとえば、代わりに

case 65: k = 2;
break;
case 66: k = 2;
break;
case 67: k = 2;
break;

あなたが持っている可能性があります

case 65:
case 66:
case 67: k = 2;
break;
于 2012-11-29T22:20:41.207 に答える