1. 程式人生 > >手機鍵盤--Java

手機鍵盤--Java

當我們用這種鍵盤輸入字母的時候,對於有些字母,往往會需要按多次鍵才能輸入。
比如:a, b, c 都在“2”鍵上,輸入 a 只需要按一次,而輸入 c 需要連續按三次。
連續輸入多個字母的規則如下:
1、如果前後兩個字母不在同一個按鍵上,則可在輸入前一個字母之後直接輸入下一個字母,如:ad 需要按兩次鍵盤,kz 需要按 6 次。
2、如果前後兩個字母在同一個按鍵上,則輸入完前一個字母之後需要等待一段時間才能輸入下一個字母,如 ac,在輸入完 a 之後,需要等一會兒才能輸入 c。
現在假設每按一次鍵盤需要花費一個時間段,等待時間需要花費兩個時間段。
現在給出一串只包含小寫英文字母的字串,計算出輸入它所需要花費的時間。
Input

輸入包含多組測試資料,對於每組測試資料:
輸入為一行只包含小寫字母的字串,字串長度不超過100。
Output

對於每組測試資料,輸出需要花費的時間。
Sample Input

bob
www
Sample Output

7
7
思路:
用一個類儲存每個字母對應的數字,用另一個類儲存每個字母在所在字母中的第幾個
。最後字串中的時間和等於第一個類中的數字和加上第二個類中如果兩個相等的個數
乘以2;(如果按同一個鍵則中間停留兩秒)。

import java.util.Scanner;

public class Main
{
	public static void main(String args[])
	{
		Scanner reader = new Scanner(System.in);
		while(reader.hasNext())
		{
			String string =reader.next();
			char A[]=new char[101];
			A=string.toCharArray();
			int sum=0;
			for(int i=0;i<A.length;i++)
			{
				Time time=new Time(A[i]);
				int n=time.Timetime2();
				sum=sum+n;
			}
			for(int i=1;i<A.length;i++)
			{
				Time time1=new Time(A[i-1]);
				int m=time1.Timetime1();
				Time time2=new Time(A[i]);
				int n=time2.Timetime1();
				if(n==m)
				{
					sum=sum+2;
				}
			}
			System.out.println(sum);
		}
		reader.close();
	}
}
class Time
{
	char a;
	int n;
	int flag=0;
	public Time(char a)
	{
		this.a=a;
	}
	public int Timetime1()
	{
		if(a=='a'||a=='b'||a=='c')
		{
			n=2;
		}
		if(a=='d'||a=='e'||a=='f')
		{
			n=3;
		}
		if(a=='g'||a=='h'||a=='i')
		{
			n=4;
		}
		if(a=='j'||a=='k'||a=='l')
		{
			n=5;
		}
		if(a=='m'||a=='n'||a=='o')
		{
			n=6;
		}
		if(a=='p'||a=='q'||a=='r'||a=='s')
		{
			n=7;
		}
		if(a=='t'||a=='u'||a=='v')
		{
			n=8;
		}
		if(a=='w'||a=='x'||a=='y'||a=='z')
		{
			n=9;
		}
		return n;
	}
	public int Timetime2()
	{
		if(a=='a'||a=='d'||a=='g'||a=='j'||a=='m'||a=='p'||a=='t'||a=='w')
		{
			flag=1;
		}
		if(a=='b'||a=='e'||a=='h'||a=='k'||a=='n'||a=='q'||a=='u'||a=='x')
		{
			flag=2;
		}
		if(a=='c'||a=='f'||a=='i'||a=='l'||a=='o'||a=='r'||a=='v'||a=='y')
		{
			flag=3;
		}
		if(a=='s'||a=='z')
		{
			flag=4;
		}
		return flag;
	}
}