2014-09-12 3 views
2

저는 큰 기타 연주자이고, 가장 좋아하는 밴드 인 Rise Against의 모든 노래를 배우려고합니다. 문제는 일부 노래는 표준 튜닝에서 탭으로 표시되고 일부는 Eb에서 탭으로 표시된다는 것입니다. 끊임없이 앞뒤로 가고 싶지 않아 모든 표준 노래를 Eb 튜닝으로 변환하는 프로그램을 만들고 싶었습니다.처리 : 어떻게하면 9가 10이 될 수 있습니까?

이것은 단순히 각 프렛에 하나씩 추가하여 이루어집니다. 그래서 만약 내가 표준의 1 번 프렛을 화음에 고정시키지 않으면, 나는 2 일에 그것을 할 것입니다. 여기

는 최소한의 일부

e|---------------| 
H|---------------| 
G|---------------| 
D|-7---3---6---4-| 
A|-4---4---4---4-| 
E|---------------| 

Verse Part 1 (x2) 
e|--------------------------------------| 
H|--------------------------------------| 
G|--------------7777----------7777-9999-| 
D|-44--44--44---7777-44--44---7777-9999-| 
A|-44--44--44---5555-44--44---5555-7777-| 
E|-22--22--22--------22--22-------------| 

Verse Part 2 (x2) 
E|--------------------------------------| 
H|--------------------------------------| 
G|--------------7777----------7777-9999-| 
D|-44--44--44---7777-44--44---7777-9999-| 
A|-4422442244---5555-44--44---5555-7777-| 
E|-2200220022--------22002200-----------| 

Chorus (2x) 
E|--------------------------------------------| 
H|--------------------------------------------| 
G|--------------------------------------------| 
D|----------99999999-111111111111111-77777777-| 
A|-77777777-77777777-111111111111111-55555555-| 
E|-55555555----------9-9-9-9-9-9-9-9----------| 

"모든주세요"에 대한 탭입니다. 그것은 10해야한다 무엇에 9 대신 콜론을두고 변환 할 때까지 잘 작동

void setup() { 
     String lines[] = loadStrings("fretEx1.txt"); 
     println("there are " + lines.length + " lines"); 
    for (int i = 0 ; i < lines.length; i++) { 

     println(shiftLine(lines[i])); 
    } 
    System.out.println(Character.isDigit('9')); 
} 


//Takes a line of tablature (spelling?) and increases all fret number values by 1. 
StringBuilder shiftLine(String tab) { 
    StringBuilder sb = new StringBuilder(tab); 
    for(int i=0; i<sb.length(); i++) { 
    char ch = sb.charAt(i); 
    if(Character.isDigit(ch)) { 
     ch++; 
     sb.setCharAt(i,ch); 
    } 

    } 
    return sb; 
} 

: 내 프로그래밍 선생님이 나를 가공이를 만들어 주었다. 어떻게 고칠 것을 권장합니까? 또한 다른 많은 문제가 있다는 것을 알고 있지만 지금 당장이 문제에 집중하려고합니다. 감사!

+1

때 문제 것 해결 될 것이고 곧있을 것입니다. 또 다른 문제가 있습니다 : 두 자리 숫자가 하나의 노트를 나타내는 방법을 관리하는 방법과 5 개의 다른 문자열을 어지럽히 지 않고 표시하는 방법> =이 시간까지? – axelduch

답변

3

귀하의 문제는 10이 숫자가 아니기 때문에 발생합니다. the ascii table을 살펴보십시오. 9를 이어가는 ascii 테이블의 문자는 콜론 문자입니다. ascii 값을 '9'로 증가 시키면 결국 ':'로 끝납니다. ascii 문자를 정수로 변환 한 다음 값을 인쇄하기 전에 증가시켜야합니다. 탭이 두절되지 않도록 숫자 두 자리를 넣을 방도 고려할 수 있습니다.

참고 숫자 '0'을위한 ASCII 값은 따라서 48 간단한 알고리즘인지의 정수 값을 ASCII 숫자 문자를 변환하는 (자바/처리)

if (Character.isDigit(someChar)) { 
    int value = (int) someChar - 48; 
} 
관련 문제