2016-08-01 8 views
0

Ich habe diesen Fehler:Konvertieren von Int-Array in Char-Array mit Golang?

# command-line-arguments 
.\cheking.go:14: cannot use strconv.Itoa(i + 64) + strconv.Itoa(j + 48) (type st 
ring) as type [8]int in assignment 

Code:

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 

    var board [8][8]int 

    for i := 1; i <= 8; i++ { // initialize array 
     for j := 1; j <= 8; j++ { 
      board[(j-1)+8*(i-1)] = (strconv.Itoa(i+64) + "" + strconv.Itoa(j+48)) // int to char 

      fmt.Printf("%s \n", board[i][j]) 
     } 
    } 
} 

Antwort

3

strconv.Itoa ist eine Abkürzung für FormatInt(int64(i), 10):

FormatInt Gibt die Stringdarstellung von i in der gegebenen Basis, für 2 < = Basis < = 36. Das Ergebnis verwendet die Kleinbuchstaben 'a' bis 'z' für Zahlenwerte> = 10.

so das Ergebnis strconv.Itoa(i+64) ist String und die board ist nicht (das ist der Fehler).

Ich glaube, Sie versuchen, so etwas wie dieses Arbeitsbeispielcode zu tun (lassen Sie mich wissen, wenn nicht):

package main 

import "fmt" 

func main() { 
    board := [8][8]string{} 
    for i := 0; i < 8; i++ { // initialize array 
     for j := 0; j < 8; j++ { 
      board[i][j] = string(i+65) + string(j+49) // int to char 
      fmt.Printf("%s ", board[i][j]) 
     } 
     fmt.Println() 
    } 
} 

Ausgang:

A1 A2 A3 A4 A5 A6 A7 A8 
B1 B2 B3 B4 B5 B6 B7 B8 
C1 C2 C3 C4 C5 C6 C7 C8 
D1 D2 D3 D4 D5 D6 D7 D8 
E1 E2 E3 E4 E5 E6 E7 E8 
F1 F2 F3 F4 F5 F6 F7 F8 
G1 G2 G3 G4 G5 G6 G7 G8 
H1 H2 H3 H4 H5 H6 H7 H8 

wenn meine Vermutung in Ordnung ist, was Sie tun können es auf diese Weise zu:

package main 

import "fmt" 

func main() { 
    board := [8][8]string{ 
     {"A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8"}, 
     {"B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8"}, 
     {"C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8"}, 
     {"D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8"}, 
     {"E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8"}, 
     {"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8"}, 
     {"G1", "G2", "G3", "G4", "G5", "G6", "G7", "G8"}, 
     {"H1", "H2", "H3", "H4", "H5", "H6", "H7", "H8"}, 
    } 

    // print the board: 
    for i := 0; i < 8; i++ { 
     fmt.Println(board[i]) 
    } 
} 

Ausgabe:

[A1 A2 A3 A4 A5 A6 A7 A8] 
[B1 B2 B3 B4 B5 B6 B7 B8] 
[C1 C2 C3 C4 C5 C6 C7 C8] 
[D1 D2 D3 D4 D5 D6 D7 D8] 
[E1 E2 E3 E4 E5 E6 E7 E8] 
[F1 F2 F3 F4 F5 F6 F7 F8] 
[G1 G2 G3 G4 G5 G6 G7 G8] 
[H1 H2 H3 H4 H5 H6 H7 H8] 
+0

Vielen Dank! Das war, was ich brauchte. – codinggirl

0

Zunächst einmal, wenn Sie jede Plattenposition mit einem String initialisieren möchten, müssen Sie die Deklaration Ihrer board Array ändern:

var board [8][8]string 

seit strconv.Itoa liefert einen String.

Dann, wenn Sie einfach jede Karte Standort sequentiell zugreifen müssen, können Sie einfach Ihre innere Schleife aktualisieren:

// You don't need to iterate through the array like C using index arithmatic 
for i := 0; i < 8; i++ { // initialize array 
     for j := 0; j < 8; j++ { 
      // use whatever logic you are using to init each value 
      board[i][j] = (strconv.Itoa(i+64) + "" + strconv.Itoa(j+48)) // int to char 

      fmt.Printf("%s \n", board[i][j]) 
     } 
    }