Autor Beitrag
LINUS19
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Do 04.01.18 00:17 
Hallo,

ich wollte ein Sudoku von der Konsole einlesen und dann lösen.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
int Matrix[][]=new int[8][8];
        Scanner sc = new Scanner(System.in);
        int eingabe =sc.nextInt();
        for(int m=0; m<Matrix.length; m++) {
            for(int n=0; n<Matrix.length; n++) {
               
                Matrix[m][n]=eingabe; // Wert wird gespeichert
            }
        }

Das Problem ist, das nachdem 81 Zahlen eingelesen wurden man immer noch Zahlen eingeben kann. Nach 81 Zahlen sollte ja eigentlich aufgehört werden.
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Do 04.01.18 01:09 
mit deinem Aktuellen Code würdest du nur eine einzige Eingabe zulassen - du kannst die Ziffern bei der eingabe nicht alle hintereinander schreiben, du musst sie dann entweder als Zeichenkette einlesen und zerteilen, oder jede Ziffer einzeln eingeben lassen.

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Do 04.01.18 01:46 
Ich habe mal auf die schnelle nen kleinen Reader geschrieben.
Er prüft die Anzahl der angegebenen Ziffern und die einzelnen Zeichen.
Es wird also ein String von Ziffern zwischen einschließlich 0 und 9 der Länge 9 erwartet, die dann nach der Verifizierung in die Matrix eingetragen werden.
nur damit du einen Anhaltspunkt hast ;)

Das könnte dann in etwa so aussehen:
readSudoku
Einloggen, um Attachments anzusehen!
_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)

Für diesen Beitrag haben gedankt: LINUS19
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Do 04.01.18 02:46 
Hast du das auch mit dem Scanner gemacht?
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Do 04.01.18 08:00 
Ja:  String input = sc.nextLine()

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)

Für diesen Beitrag haben gedankt: LINUS19
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Do 04.01.18 21:20 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
int Matrix[][]=new int[8][8];
        
    Scanner sc = new Scanner(System.in);
                                                                                                                       
      System.out.println("Gib die Zahlen durch ein Komma getrennt ein");
       for(int i=0; i<9; i++) {
         String  eingabe = sc.nextLine();
        
         if(eingabe.length()==17 ) {
         System.out.println();
       }
         
         String[] Test=eingabe.split(Pattern.quote(","));
          System.out.println(Arrays.toString(Test));   
        
         }

Wie kann ich die Eingabe dann in dem Array speichern?
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Do 04.01.18 21:28 
Du hast noch immer einen kleinen Denkfehler.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
       for(int i=0; i<9; i++) {
         String  eingabe = sc.nextLine();
        
         if(eingabe.length()==17 ) {
         System.out.println();
       }
diese Schleife überschreibt ständig die Variable Eingabe mit dem eingegebenen String - sodass du dort, wo du gerade versuchst die eingegebenen Werte zu speichern, nur die letzte eingegebene Zeichenfolge kennst.

zum Speichern müsstest du durch die Liste von Zahlen durchiterieren, die von einem String in einen Integer umwandeln und dann in die Matrix schreiben, abh. von Reihe und Spalte.
eine StringToInt Funktion wirst du sicherlich schnell durch eine Suche finden ;)

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Do 04.01.18 21:55 
Den String kann ich mit Integer.parseInt("eingabe"); umwandeln, aber ich verstehe immer noch nicht ganz was du meinst.
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Do 04.01.18 22:05 
du gehst in einer zweiten Schleife jedes Element des String-Feldes durch, und schreibst den in einen Integer umgewandelten Wert an den gleichen Spaltenindex in der Sudoku-Matrix wo auch dein Ziffern-String in dem String-Feld war.

Den Zeilenindex kennst du, wenn du den angesprochenen Denkfehler behebst :)

Beachte außerdem, dass du eine Matrix mit den Dimensionen 8×8 erstellt hast, Sudoku hat aber 9×9 Felder

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)

Für diesen Beitrag haben gedankt: LINUS19
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Do 04.01.18 22:21 
user profile iconSymbroson hat folgendes geschrieben Zum zitierten Posting springen:

Beachte außerdem, dass du eine Matrix mit den Dimensionen 8×8 erstellt hast, Sudoku hat aber 9×9 Felder

Arrays beginnen doch bei 0 oder?
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Do 04.01.18 22:23 
Ja, sicher, aber in den eckigen Klammern beim Erstellen eines Feldes gibst du in der Regel die Länge an. Ein Array der Länge 8 hat also die Indizes 0 bis 7

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Do 04.01.18 23:52 
Meintest du so was :

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
 
String Eingabe = sc.nextLine();
for(int i=0; i< 9; i++) {
for(int j=0; j< Eingabe.length(); j++ {
// Und hier Umwandlung String zu Int und in Array speichern 
}
}
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Fr 05.01.18 00:00 
Naja fast - 'eingabe' soll ja bei dir eine durch Komma getrennte Liste von Ziffern sein - also müsstest du wenn schon die Länge des zerteilten Strings angeben.

Und es mag zwar in diesem Falle irrelevant sein, aber normalerweise ermittelt man erst die Anzahl wie oft die Schleufe wiederholt werden soll, anstatt das immer wieder neu zu ermitteln - weil .length() ja ein Funktionsaufruf ist. Du musst das hier nicht zwingend tun, da das ja hier nur 9 durchgänge sind, aber behalte es in Zukunft im Hinterkopf ;)

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)

Für diesen Beitrag haben gedankt: LINUS19
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Fr 05.01.18 00:54 
Wenn ich in die beiden Forschleiden  Matrix[i][j]= charAt(j) eingebe und i und j kleiner sind 3 und ich das eingegebe:
12
12
Und die Matrix dann ausgebe kommt als Ergebnis:
4950
4950

Woran liegt das?
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Fr 05.01.18 07:15 
Kannst du dazu bitte nochmal den Quelltext acgicken?

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Fr 05.01.18 11:20 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
int Matrix[][]=new int[2][2];
        
      Scanner sc = new Scanner(System.in);
                                                                                                                         
        System.out.println("Gib die Zahlen so ein:12");
     
            
        for(int m=0; m<2; m++) {
          String  eingabe = sc.nextLine();
          for(int n=0; n<2; n++) {
            
            Matrix[m][n]=eingabe.charAt(n);
           }
        }
         
        
        for(int m=0; m<2; m++) {            
            System.out.println();
          for(int n=0; n<2; n++) {
            System.out.print(Matrix[m][n]);  // die Ausgabe ist : 4950
                                                                                4950
            }
          }
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Fr 05.01.18 13:47 
Also das Prinzip stimmt jetzt zumindest, nur verwirrt mich, dass du jetzt ein 2×2 Feld hast ^^
Und du solltest beachten, das charAt den Zeichencode des Zeichens zurückgibt, also solltest du vllt, je nachdem wie du es handhaben willst, den code in die Zahl umwandeln (einfach charAt(..) -'0'

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Fr 05.01.18 14:00 
Das mit dem 2*2 Feld war nur zum Test.
Mit dem charAt(n)-'0' funktioniert es,aber ich verstehe nicht warum -'0' das so umwandelt.
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Fr 05.01.18 14:50 
Der Datentyp char(acter) wird normalerweise als Zeichen interpretiert, speichert aber nur den Zeichencode, weshalb er auch als integer verwendet werden kann.
Somit wird '0' - '0' zu 0, und '8' - '0' zu 8
'0' entspricht dem Zeichencode 48 - '0' ist aber lesbarer ;)

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)

Für diesen Beitrag haben gedankt: LINUS19
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Fr 05.01.18 16:45 
Wie hast du das eigentlich gemacht?
Könntest du vielleicht dein Quelltext Posten?