# Programm zum einlesen von ISBN Nummern



## Scherana (22. Mai 2012)

Hey alle zusammen, 

ich verzweifel langsam wirklich an dieser Aufgabe, wobei ich eigentlich meine Grundidee gar nicht so schlecht fand..
Also hier mal die Aufgabenstellung:
SchreibteinProgramm, dass eine ISBN einliest und dazu die maximale Leihfrist ausgibt.
Danach soll das Programm wieder den Eingabedialog anzeigen, bis eine leere Zeichenkette (““) eingegeben wird.

Das habe ich bis jetzt:

```
import javax.swing.*;
public class ISBN { 
public static void main(String []args)
{
	int a = 3-69687-693-1L;
	int b = 0-90049-701-XL;
	int c = 7-08600-995-4L;
	int d = 9-67565-948-XL;
	int x;
	String numberString = JOptionPane.showInputDialog("Bitte geben Sie ihre ISBN ein.");
	
	int x = BigInteger.parseInt(numberString);
	
	
	if ((x==a)|(x==c))
	System.out.println("14 + Tage");
	
	if ((x==b)|(x==d))
	System.out.println("30 + Tage");
	
	else 
	System.out.println(x + ":Keine ISBN NUmmer");
	
	if (x==0)
	System.exit( 0 );
	
}
	}
```

also ich wollte es praktisch so machen, dass ich praktisch bei der Eingabe einfach nur schaue, ob die eingegebene Zahl eine der 4 vorhandenen ISBN NUmmern ist. Wenn sie zb a oder c ist, kann man das Buch 14 Tage ausleihen etc. Und am Ende wollte ich, dass man das Programm beenden kann, indem man 0 eingibt. 

Leider tun sich alles in allem einige Probleme auf:
1. ich weiß nicht genau welchen Datentyp ich nehmen sol (int oder char) da die zahl ja durch die denkstriche iwie getrennt wird. 
2. Weiterhin sagt mir das Programm die ganze Zeit, dass meine Zahlen zu groß seien, dies habe ich jetzt mit dem dranhängenden L gelöst und das klappt auch bei allen, außer dem int c. Und ich weiß wirklich nicht mehr, was ich da noch tun soll.

Es wäre echt toll wenn mir da jemand weiterhelfen könnte. Hab schon in meinem Java Buch und allem geschaut aber außer dem Tipp mit dem angehängten L konnte ich nichts weiter wirklich brauchbares finden


----------



## Camill (22. Mai 2012)

Scherana hat gesagt.:


> 1. ich weiß nicht genau welchen Datentyp ich nehmen sol (int oder char) da die zahl ja durch die denkstriche iwie getrennt wird.


Weder 'int' noch 'char'.


Scherana hat gesagt.:


> 2. Weiterhin sagt mir das Programm die ganze Zeit, dass meine Zahlen zu groß seien, dies habe ich jetzt mit dem dranhängenden L gelöst und das klappt auch bei allen, außer dem int c. Und ich weiß wirklich nicht mehr, was ich da noch tun soll.


[c]int a = 3-69687-693-1L;[/c] und [c]int b = 0-90049-701-XL;[/c] soll also richtig sein? Sicherlich nicht. 
Dir fehlen Grundlegende Kenntnisse über Datentypen, Trennstriche und 'int' passen nicht zusammen. Schau dir am besten nochmal an welcher Datentyp für was geeignet ist, zb. hier.


----------



## Scherana (22. Mai 2012)

also muss ich einen long datentyp verwenden? oder kann ich diese ISBN auch einfach als "string" lesen? Du hast recht, mir fehlen grundkenntnisse, weil ich gerade mal 5 Stunden programmieren hatte. Trotzdem danke für deine Hilfe.


----------



## Camill (22. Mai 2012)

Der Datentyp 'long' ist ebenfalls nur für Zahlen gedacht. Mit 'String' liegst du schon richtig, wie du diese vergleichst findest du im Forum in der FAQ.


----------



## Scherana (22. Mai 2012)

selbst wenn ich jetzt alles mit string mach, krieg ich immer noch die Meldung dass die integer nummer 08600 zu lang ist? wie geht denn das? ich meine, ich habe doch den datentyp string davor??


----------



## Camill (22. Mai 2012)

Code wäre hilfreich, vermute jedoch fehlende [c]" "[/code] beim initialisieren des Strings.


----------



## Scherana (22. Mai 2012)

```
import javax.swing.*;
public class ISBN { 
public static void main(String[] args)
{
	JOptionPane.showInputDialog(null, "Bitte etwas eingeben");
	string a = "3696876931";
	string b = "090049701X";
	string c = "7086009954";
	string d = "967565948X";
	string x = "";
	
	
	if ((x=a)|(x=c))
	System.out.println("14 Tage");
	
	if ((x=b)|(x=d))
	System.out.println("30 Tage");
	
	else 
	System.out.println(x + ":Keine ISBN NUmmer");
	
	if (x="")
	System.exit( 0 );
	
}
	}
```


----------



## Camill (22. Mai 2012)

Java ist Case-Sensitive, Schlüsselwörter wie 'String' werden großgeschrieben. Das vergleichen der Strings ist immernoch falsch, die getätigte Eingabe läuft ins "leere".


----------



## Deros (22. Mai 2012)

Groß- und Kleinschreibung beachten, richtig ist String.
Ausserdem wird ein Vergleich immer mit zwei Gleichzeichen gemacht, also x==a wobei das nur für die einfachen Datentypen int, long etc. gilt bei String musst du equals nutzen


----------



## Scherana (22. Mai 2012)

mal allgemein ne Frage, wenn ich etwas in ein Eingabefeld reinschreibe und diese Eingabe dann weiter benutzen will. wie mach ich das? Tu ich da die Eingabe als Variable definieren und dann einfach mit der Variablen weiterrechnen oder gibt es iwie nen Befehl, oder ne Zeichenkombi, damit das Programm automatisch mit der Eingabe weiter arbeitet


----------



## Deros (22. Mai 2012)

```
String x = JOptionPane.showInputDialog(null, "Bitte etwas eingeben");
```


aber auch nachzulesen was sonst noch alles gehtklck


----------



## Scherana (22. Mai 2012)

es klappt es klappt es klappt!!!!!
jetzt nur noch eine sache: es zeigt mir immer an, dass es KEINE ISBN NUmmer ist. obwohl ich praktisch mit der Eingabe als x weiterrechne, hab ich wieder iwo einen syntax fehler gemacht?


```
import javax.swing.*;
public class ISBN { 
public static void main(String[] args)
{
	
	String x;
	String a = "3696876931";
	String b = "090049701X";
	String c = "7086009954";
	String d = "967565948X";
	x = JOptionPane.showInputDialog(null, "Bitte die ISBN eingeben");

		
	if (x.equals(a) & (x.equals(c)))
	System.out.println("14 Tage");
	
	if (x.equals(b) & (x.equals(d)))
	System.out.println("30 Tage");
	
	else 
	System.out.println(x + ":Keine ISBN NUmmer");

	
}
	}
```


----------



## Deros (22. Mai 2012)

naja wie soll die eingabe auch b und d gleichzeitig sein?


----------



## Scherana (22. Mai 2012)

oh gott ich bin echt so blind! vielen vielen dank!


----------



## Scherana (22. Mai 2012)

so also arbeiten tut das programm ja schonmal *juchey*

jetzt zu der schleife. ich wollte es mit for und break / continue machen, aber leider, zeigt mir mein Programm an, dass mein break und continue außerhalb des loop bzw switch sind. 
Was hat das genau zu bedeuten? muss ich da noch ne klammer drumziehen oder wie bekomme ich mein break und continue rein?


```
import javax.swing.*;
public class ISBN { 
public static void main(String[] args)
{
	

	String a = "3696876931";
	String b = "090049701X";
	String c = "7086009954";
	String d = "967565948X";
	
	
	String x = JOptionPane.showInputDialog(null, "Bitte die ISBN (ohne Trennstriche) eingeben");

		
{	if ((x.equals(a)) | (x.equals(c)))
	System.out.println("Ausleihfrist: 14 Tage");
	
	if ((x.equals(b)) | (x.equals(d)))
	System.out.println("Ausleihfrist: 30 Tage");
	
	else 
	System.out.println(x + ":Keine ISBN NUmmer");
	
	String e = "";
	
    if (x.equals(e))
	break;
	
	else 
	continue; 
	}

	
}
	}
```


----------



## Deros (22. Mai 2012)

ich seh keine for-schleife halte das auch für keine gute idee mach ne while schleife mit nem einfachen boolean denn du dann einfach auf false setzt wenn du das programm beenden willst


----------



## Scherana (22. Mai 2012)

und wie genau mache ich das? im programmierkurs war das immer sehr komplioziert. stimmt es in etwa so?


```
import javax.swing.*;
public class ISBN { 
public static boolean isbn(string isbnx)
{
	boolean x;

	String a = "3696876931";
	String b = "090049701X";
	String c = "7086009954";
	String d = "967565948X";
	String e = "";
	
	String x = JOptionPane.showInputDialog(null, "Bitte die ISBN (ohne Trennstriche) eingeben");

	while (x=true) 
	x = true;
		
	if ((x.equals(a)) | (x.equals(c)))
	System.out.println("Ausleihfrist: 14 Tage und ausgeliehen");
	x = true;
	
	if ((x.equals(b)) | (x.equals(d)))
	System.out.println("Ausleihfrist: 30 Tage und vorhanden");
	x = true;
	
	else 
	System.out.println(x + ":Keine ISBN NUmmer");
	x = true;
	
	if (!x.equals(e))
	x = false;
	System.exit (0);
	
	
}
	}
```


----------



## Deros (22. Mai 2012)

x ist kein boolean sondern dein String da brauchste schon ne neue variable und dann mit == vergeichen nicht mit =

brauchst dann auch nicht immer wieder auf true setzen warum sollte da zwischendurch was anderes als true drin sein? theoretisch kommste auch ohne abbruch bedingung hin da du ja eh mit System.exit das Programm killst

und ganz wichtig setz mal klammern um deine if anweisungen und schleifen dann siehst auch wo die anfängt und aufhört


----------



## Scherana (22. Mai 2012)

also ich brauch für meinen String x nochmal eine neue Variable? aber wieder mit String?
wie meinst du das einfach die "trues" weglassen? 
vergleichen (==) überall also auch bei den Definitionen oder nur bei dem true/false?


----------



## Deros (22. Mai 2012)

wenn du eine variable definieren willst = wenn du verleichen willst ==

für deine schleife brauchste halt ne neue variable und dafür würde ein boolean reichen vielleicht solltest nochmal ganz von vorne in einem guten buch anfangen da scheint bei dir noch extrem viel zu fehlen


----------



## Scherana (22. Mai 2012)

wie gesagt 5. Stunde programmieren. Da hatte man noch nicht so wirklich viel ^^
Könntest du mir nur nen Vorschlag zeigen, wie ich da rangehen soll? Weil ich hab jetzt alles in boolean geschrieben also ganz oben bei public static ja auch, und ich weiß nicht, ob das unbedingt nötig ist...


----------



## Deros (22. Mai 2012)

nagut will ja mal nicht so sein aber guck dir bitte auch die unterschiede von meinem zu deinem code an und überlegt was die unterschiede machen



```
import javax.swing.*;

public class ISBN {
	public static void main(String[] args) {

		String a = "3696876931";
		String b = "090049701X";
		String c = "7086009954";
		String d = "967565948X";
		boolean e = true;
		
		while (e) {
			String x = JOptionPane.showInputDialog(null,
					"Bitte die ISBN (ohne Trennstriche) eingeben");

			if ((x.equals(a)) | (x.equals(c))) {
				System.out.println("Ausleihfrist: 14 Tage und ausgeliehen");
			} else {

				if ((x.equals(b)) | (x.equals(d)))
					System.out.println("Ausleihfrist: 30 Tage und vorhanden");

				else
					System.out.println(x + ":Keine ISBN NUmmer");
			}
			if (x.equals(""))
				e = false;
		}
	}
}
```


----------



## Scherana (22. Mai 2012)

oh mein gott vielen vielen dank!!!!!

also das boolean bei static void braucht man oben gar nicht?

und das zweite if steht praktisch "unter" dem ersten else?

bei dem letzten 
	
	
	
	





```
if (x.equals(""))
                e = false;
```


woher kennt das Programm die Variable "" ?


----------



## Deros (22. Mai 2012)

String[] args ist für Werte die man zum Programmstart mit übergeben könnte ist für dich jetzt aber eher uninteressant.

weiß nicht was du mit unter meinst. das zweite if wird dann nur geprüft wenn das erste nicht erfolgreich war. schöner wäre das ganze vielleicht mit einer switch anweisung aber vielleicht nicht alles auf einmal.

"" ist keine variable es wird einfach geprüft ob die variable x gleich einem leeren string ist.
theoretisch kannst du auch 2 feste strings vergleichen 
z.b. "ich bin ein String".equal("ein anderer String");
macht keinen sinn ist aber möglich


----------



## Scherana (22. Mai 2012)

ja das meinte ich praktisch so "untergeordnet" weiß nicht, ob man den begriff so nehmen kann, aber das meinte ich auf jeden fall damit  

ah okay danke  


wow super vielen dank!!!


----------

