Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
import java.util.Random;
import java.util.Scanner;
public class blub {
public static void main (String args [])
{
System.out.println( "Eingabe: " );
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int[] z = new int[1];
int zahl;
Random r = new Random();
for(int i=0;;i++){
s = sc.nextLine();
if ((s>0) && (s<100)){ // wenn s zwischen 0 und 100 liegt
zahl = r.nextInt(2000);
z[i] = zahl-1000;
System.out.print(+z[i]);
break;}
if (s.equals("-1")){
break;}
else // und hier für alle anderen zahlen
{
System.out.println( "Ungültiger Wert! Die Eingabe muss zwischen 0 und 100 liegen. Bitte noch einmal probieren oder mit -1 beenden.");
}
System.out.println("Ungültiger Wert! Bitte noch einmal probieren oder mit -1 beenden.");
System.out.println("Neuerliche Eingabe:");
}
}}
ich ein prob mit string- weiß nicht ob das mit dem zahlenbereich funktioniert bitte um hilfe
Damit liest du einen String ein, in der nachfolgenden if-Abfrage führst du aber Vergleiche durch die nur mit Zahlen möglich sind. Der String muss also in eine Zahl umgewandelt werden.
Damit wandelst du einen String in einen Ganzzahl um:
import java.util.Random;
import java.util.Scanner;
public class blub {
public static void main (String args [])
{
System.out.println( "Eingabe: " );
Scanner sc = new Scanner(System.in);
String s = sc.nextLine(); int t = Integer.parseInt(s);
int[] z = new int[1];
int zahl;
Random r = new Random();
for(int i=0;;i++){
if (t>0 & t<100){
zahl = r.nextInt(2000);
z[i] = zahl-1000;
System.out.print(+z[i]);
break;}
if (s.equals("-1")){
break;}
if(t<0 & t>100)
{
System.out.println( "Ungültiger Zahl! Die Eingabe muss zwischen 0 und 100 liegen. Bitte noch einmal probieren oder mit -1 beenden.");
}
System.out.println("Ungültiger Wert! Bitte noch einmal probieren oder mit -1 beenden.");
System.out.println("Neuerliche Eingabe:");
s = sc.nextLine();
t = Integer.parseInt(s);
}
}}
jetzt hab ich es mal so probiert
ich gebe eine zahl zwischen 0 und 100 - dies funktioniert
ich gebe eine die kleiner größer ist ein - die meldung mit "ungültiger zahl" kommt - gebe ich nun eine richtig zahl ein kommt die fehlermeldung java.lang.ArrayIndexOutOfBoundsException:
geb ich statt der einer zahl einen buchstaben ein kommt ich leider nicht zu der meldung "ungültiger wert"
Du erzeugst ein Array mit einem Element, dann greifts du auf das Array zu mit z.
Sobald i > 0 ist, hast du die Grenze deines Arrays überschritten, da es ja nur aus dem nullten Element besteht.
Damit es funktioniert müsstes du folgendes sagen:
Code:
z[0] = zahl - 1000;
Weiterhin sind deine Vergleiche falsch, du benutzt Binäroperatoren statt Vergleichsperatoren.
Du musst folgendes benutzen:
Code:
logisches UND: &&
logisches ODER: ||
Da ein char intern auch nur ein int ist, funktioniert die Eingabe auch mit einzelnen Buchstaben.
PS: Hab deinen Code mal umgeschrieben, wenn du Fragen hast einfach stellen:
Code:
import java.util.Scanner;
import java.util.Random;
public class Test
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
Random r = new Random();
String s;
int[] z = new int[1];
int zahl;
int i;
System.out.print("Eingabe: ");
s = input.nextLine();
i = Integer.parseInt(s);
while(true)
{
if(i > 0 && i < 100)
{
zahl = r.nextInt(2000);
z[0] = zahl - 1000;
System.out.println(z[0]);
break;
}
else if(s.equals("-1"))
{
break;
}
else
{
System.out.println("Zahl muss zwischen 0 und 100 liegen (oder -1 zum Beenden)");
System.out.print("Neue Eingabe: ");
s = input.nextLine();
i = Integer.parseInt(s);
}
}
}
}
array deshalb weil die aufgabenstellung so war
ich bin grad beim überlegen ob das ganze nicht auch mit try und catch funktioniert statt mit if - denn dies wäre die zweite aufgabenstellung- aber da steh ich irgendwie vollkommen
Code:
public static void main(String[] args)
{ try{
Scanner input = new Scanner(System.in);
Random r = new Random();
String s;
int[] z = new int[1];
int zahl;
int i;
System.out.print("Eingabe: ");
s = input.nextLine();
i = Integer.parseInt(s);
zahl = r.nextInt(2000);
z[0] = zahl - 1000;
System.out.println(z[0]);
}
catch (java.lang.ArrayIndexOutOfBoundsException e ) {
System.out.println("Ungültiger Wert. Eingabe muss zwischen 0 und 100 liegen. Bitte nochmals eingeben oder mit -1 beenden.");
int neueEingabe = 1;
while ((0 <= neueEingabe || neueEingabe <= 100)) {
System.out.println(" ");
System.out.println("Geben Sie einen Wert von 0 bis 100 ein:");
Scanner sc = new Scanner(System.in);
neueEingabe = sc.nextInt();}
}}}
es funktioniert leider überhaupt nicht. und mit catch müssten auch eine buchstabenfolge abgefangen werden- desweiteren kann ich mit catch auch die zhal mit -1 abfangen und dann abbrechen?
Mit try-catch können nur Objekte vom Typ Exception abgefangen werden, Strings oder primitive Datentypen gehen nicht.
Ich würde das mit der Eception übrigens so lösen:
Code:
import java.util.Scanner;
import java.util.Random;
public class Test
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
Random r = new Random();
String s;
int[] z = new int[1];
int zahl;
int i;
System.out.print("Eingabe: ");
s = input.nextLine();
while(true)
{
try
{
i = Integer.parseInt(s);
if(i > 0 && i < 100)
{
zahl = r.nextInt(2000);
z[0] = zahl - 1000;
System.out.println(z[0]);
break;
}
else if(s.equals("-1"))
{
break;
}
else
{
throw new NumberFormatException();
/* Wir lösen eine Exception aus wenn der Wertebereich nicht stimmt.
(Diese Exception wird normalerweise von Java selbst geworfen
wenn bei Integer.parseInt(s) in s was anderes als Zahlen drin stehen.) */
}
}
catch(NumberFormatException e) // Hier wird die geworfene Exception gefangen und darauf reagiert.
{
System.out.println("Eingabe muss eine Zahl sein und zwischen 0 und 100 liegen (-1 zum Beenden)");
System.out.print("Neue Eingabe: ");
s = input.nextLine();
}
}
}
}
jetzt haben wir ad on zu aufgabe bekommen und jetzt weiß ich auch wozu der array gutost :"Erstellen Sie ein Integer Array mit 100 Stellen und füllen Sie dieses mit Zufallszahlen zwischen -1000 und 1000." also wieder umschrieben-naja
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
Random r = new Random();
String s;
int[] z = new int[100];
int zahl;
int i;
System.out.print("Eingabe: ");
s = input.nextLine();
while(true)
{
try
{
z[i] = Integer.parseInt(s);
if(i > 0 && i < 100)
{
zahl = r.nextInt(2000);
z[0] = zahl - 1000;
System.out.println(z[0]);
break;
}
else if(s.equals("-1"))
{
break;
}
else
{
throw new NumberFormatException();
/* löst eine Exception aus wenn der Wertebereich nicht stimmt.
(Diese Exception wird normalerweise von Java selbst geworfen
wenn bei Integer.parseInt(s) in s was anderes als Zahlen drin stehen.) */
}
}
catch(NumberFormatException e) // Hier wird die geworfene Exception gefangen und darauf reagiert.
{
System.out.println("Eingabe muss eine Zahl sein und zwischen 0 und 100 liegen (-1 zum Beenden)");
System.out.print("Neue Eingabe: ");
s = input.nextLine();
}
}
}
}
des mit aarry funktioniert nicht -leider
und ein prob bin ich drauf gekommen das prog soll für eine flasche zahl eine exeption machen mit einer aussage
und für eine buchstaben eine exeption mit einer anderen aussage. da steh ich auch wieder an- die aufgaben sind leider viel zu kompliziert für mich*seufz*
import java.util.InputMismatchException;
import java.util.Random;
import java.util.Scanner;
public class blub {
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
Random r = new Random();
int[] z = new int[100];
int zahl;
System.out.print("Eingabe: ");
int i = input.nextInt();
while(true)
{
try
{
if(i > 0 && i < 100)
{
zahl = r.nextInt(2000);
z[0] = zahl - 1000;
System.out.println(z[0]);
}
else if(i==-1)
{
break;
}
else if (i<0 | i>100)
{
throw new NumberFormatException();
}
else {
throw new InputMismatchException();
}
}
catch (InputMismatchException b){
System.out.println("ja");}
catch(NumberFormatException e)
{
System.out.println("Eingabe muss eine Zahl sein und zwischen 0 und 100 liegen (-1 zum Beenden)");
}
System.out.print("Neue Eingabe: ");
i = input.nextInt();
}}
}
mein prob ist wenn ich jetzt buchstaben eingebe komme ich nicht zum catch für InputMismatchException- wo liegt der fehler?
wird dann nicht direkt bei
> int i = input.nextInt();
eine Exception geworfen? die fängst du nicht mit try/catch ab,
deine eigene
> throw new InputMismatchException();
wird nur geworfen, wenn i schon fertig eingelesen wurde, wie soll das gehen wenn du Buchstaben eintippst?
außerdem klingen deine vielen if/ else danach, als wenn der letzte else-Fall nie erreicht werden kann