Erste Schritte 2 Kleine Programme

MichaelJAVA

Mitglied
Hallo liebe Community!

Ich studiere im dritten Semester Wirtschaftsingenieur und habe mir zur Übung für unser bevorstehendes Informatik-Labor 2 Aufgaben rausgesucht, die ich einfach nicht gelöst bekomme.
Ich hoffe es bereitet euch keinen großen Umstand mir zu zeigen, wie diese gelöst auszusehen haben:

(Ich vergaß anzumerken: In Java wird programmiert 🙂)

1.
In einem Array
t(1)=2
t(2)=5
t(3)=1
t(4)=7
t(5)=3
t(6)=4

Mittels einer Do-While-Schleife soll t()=3 gesucht werden und der Index 5 ausgegeben werden.

2.
Zuerst soll vom Nutzer ein Wert eingegeben werden. (Reelle Zahlen)

Dann mittels If-Schleife folgendes ausgegeben werden:

Wert >=0 aber <=10 soll ausgegeben werden "1"
Wert >10 aber <=20 soll ausgegeben werden "2"
Wert >20 aber <=30 soll ausgegeben werden "3"
Wert >30 soll ausgegeben werden ">=4"

Ich hoffe inständig, dass es jemandem gelingt diese in Form zu bringen.
Ihr braucht euch auch keine Mühen zu machen diese zu erklären, ich sollte aus euren Quellcodes schlau werden.

Vielen vielen Dank im Voraus!
Liebe Grüße
Michael
 
Array-Darstellung sieht so aus t[x] anstatt t(x), t(x) wäre Methodenaufruf.

Eine do-while-Schleife könnte so aussehen:
Java:
int i = 0;
do {
    i++;
} while(t[i] != 3);

Dieses Forum ist übrigens nicht da, dass andere Hausaufgaben erledigen. Du solltest deine eigenen Ansätze haben.

Wichtig.
 
Es war nicht meine Absicht eine komplette Lösung zu erfahren. Vielleicht habe ich mich undeutlich ausgedrückt.

Eine grobe Stütze zur Lösung der zwei Programme wäre nur hilfreich.

Liebe Grüße
 
Zur ersten Aufgabe sollte mein Beitrag wohl genügen.
Zur zweiten Aufgabe würde ich einen Scanner empfehlen:
Java:
Scanner sc = new Scanner(System.in);
System.out.print("Geben Sie Ihre Zahl ein: ");
double d = sc.nextDouble();
Und wie if-Abfragen funktionieren, solltest du wissen.

Tipp: Wenn du von einer Richtung anfängst (z.B. von größer nach kleiner) dann kannst du dir eine Menge Abfragen sparen.
 
Bei der 2ten Aufgaben könnte man sich die Geschichte ja relativ einfach machen.


Java:
...
double d = sc.nextDouble();

int ergebnis = (int) (d + 10) / 10;
if (ergebnis >= 4) {
  ergebnis = 4;
  System.out.println("\">=" + ergebnis + "\""); 
}
else
{
System.out.println("\"" + ergebnis + "\"");
}
 
Zuletzt bearbeitet von einem Moderator:
(10 + 10) / 10 == 2 != 1

Deine Methode kann leider nicht angewandt werden

@MichaelJAVA: Bei einem Wert < 0 soll gar nichts ausgegeben werden, deshalb ist dieser Fall am besten vorher auszuschließen
 
Die zweite Aufgabe könnte man auch sehr gut mit einer Switch-Anweisung lösen, anstatt dass man geschachtelte If-Abfragen verwendet und der Code mit der Zeit unübersichtlich werden kann.
 
Die zweite Aufgabe könnte man auch sehr gut mit einer Switch-Anweisung lösen, anstatt dass man geschachtelte If-Abfragen verwendet und der Code mit der Zeit unübersichtlich werden kann.

Okay.
Java:
switch(input){
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
        System.out.println("1");
        break;
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
    case 16:
    case 17:
    ...
    ...
    case 39:
        System.out.println("3");
        break;
    case 40:
    case 41:
    case 42:
    case 43:
    case 44:
    case 45:
    case 46:
    case 47:
    ...
    case Integer.MAX_VALUE:
        System.out.println(">=4");
 
switch case? Das musst du nochmal genauer erklären...

Java:
if (d < 0)
  return; oder System.exit(0);

vorweg führt zu keiner Verschachtelung. Oder man prüft wie schon gesagt in umgekehrter Reihenfolge
 
Für mich ist es nun einmal nicht so einfach Programmiersprachen auseinander zu halten. Ich habe vor Java eigentlich nur mit Pascal/Delphi programmiert und da waren die Switch-Case Konstrukte etwas einfacher und übersichtlicher gehalten, zumal ich in Java nicht sehr oft mit Switch-Anweisungen arbeite. 😀

Kleines Beispiel:

Code:
var punkte: Integer; 
     wertung: String; 

case punkte of 
  0 : wertung := 'Ungenügend'; 
  1..3 : wertung := 'Mangelhaft'; 
  4..6 : wertung := 'Ausreichend'; 
  7..9 : wertung := 'Befriedigend'; 
  10..12 : wertung := 'Gut'; 
  13..15 : wertung := 'Sehr gut'; 
  else wertung := 'Diese Punktzahl gibt es nicht.'; 
end;
 
(10 + 10) / 10 == 2 != 1

Deine Methode kann leider nicht angewandt werden

@MichaelJAVA: Bei einem Wert < 0 soll gar nichts ausgegeben werden, deshalb ist dieser Fall am besten vorher auszuschließen

ach, oh, hab ich nicht genau genug gelesen. Dann vielleicht etwas in der Richtung:
Code:
		int ergebnis = 4-(int) (40-d)/10;
 
Bei 2. wird aus der Aufgabenstellung nicht wirklich klar, was im Fall der Eingabe einer negativen Zahl geschehen soll.
Man könnte da z.B. eine Wiederholung der Eingabe fordern, nur ne Fehlermeldung ausgeben, oder nichts tun.
Ansonsten denk ich, könnte das so aussehen:

Java:
Scanner sc = new Scanner(System.in);
System.out.print("Geben Sie Ihre Zahl ein: ");
double d = sc.nextDouble();

int ergebnis=0;
if (d==0) {
  ergebnis = 1;
}
else 
{
  ergebnis = 4-(int) (40-d)/10;
}
if (ergebnis > 3) {
  ergebnis = 4;
  System.out.println("\">=" + ergebnis + "\""); 
}
else
{
   if (ergebnis > 0)  System.out.println("\"" + ergebnis + "\"");
}
 
Die zweite Aufgabe könnte man auch sehr gut mit einer Switch-Anweisung lösen, anstatt dass man geschachtelte If-Abfragen verwendet und der Code mit der Zeit unübersichtlich werden kann.
Da finde ich die hier vorgestellte Lösung mit switsch aber wesentlich unübersichtlicher und wesentlich aufwändiger zu schreiben.
 
Besonders der Teil zwischen

Java:
    case 47:
    ...
    case Integer.MAX_VALUE:

könnte sich etwas hinziehen.
 
Wie wärs denn einfach mit dem hier? (2. Aufgabe)

Java:
public static void main(String[] args) {
	
		String eingabe = JOptionPane.showInputDialog("Bitte eine Zahl eingeben: ");
		Double zahl = Double.parseDouble(eingabe);
		String ausgabe = "";
		
		if (zahl >= 0 && zahl <= 10){
			ausgabe = "1";
		}
		if (zahl > 10 && zahl <= 20){
			ausgabe = "2";
		}
		if (zahl > 20 && zahl <= 30){
			ausgabe = "3";
		}
		if (zahl > 30){
			ausgabe = ">=4";
		}
		System.out.println(ausgabe);
		//oder
		JOptionPane.showMessageDialog(null, ausgabe);

	}
 
Das geht auch mit weniger Prüfungen:
Java:
if (zahl >= 0) {
    String ausgabe = ">=4";
    if (zahl <= 10) {
        ausgabe = "1";
    } else if (zahl <= 20) {
        ausgabe = "2";
    } else if (zahl <= 30) {
        ausgabe = "3";
    }
    System.out.println(ausgabe);
}
 
Ungeklärt ist nach wie vor, was geschehen soll, wenn Zahlen kleiner Null eingegeben werden. Ebenfalls unklar, das scheint mir hier etwas zu kurz gekommen, was ganau auszugeben ist.
Sind es die reinen Ziffern 1, 2, 3 und der Ausdruck >=4, oder sollen die Anführungszeichen Teil der Ausgabe sein, also "1","2","3" und ">=4".
In diesen Punkten erscheint die Aufgabenstellung nicht wirklich klar, weshalb auch die schönste Lösung mit Fragezeichen zu versehen ist.
 
Die Zahlen kleiner Null sollen hier unbeachtet bleiben und müssen somit im Code nicht weiter berücksichtigt werden.

Und die Anführungszeichen haben hier nur zur "Markierung" des Textes dienen sollen.

Ich bitte das hier zu entschuldigen, falls ich mich unklar ausgedrückt haben sollte.

Mein Vorschlag zur ersten Aufgabe sieht ausgearbeitet so aus, ich finde nur meinen Fehler nicht:

public class tabelle
{
public static void main(String[] args)
{
int arrayhello[] = new int[6];

arrayhello[1] = 2;
arrayhello[2] = 5;
arrayhello[3] = 1;
arrayhello[4] = 7;
arrayhello[5] = 3;
arrayhello[6] = 4;
int j=1;

do
{
j=j+1;

if (arrayhello[j]==3){

System.out.println(arrayhello[j]);
}
}
while(j<7);
System.out.println(arrayhello[j]);
}
}

Euren geschulten Augen müsste mein Fehler vielleicht auffallen.

Lieber Gruß!
 
In Java beginnen Arrays mit dem Index 0
Bei einem Array mit 6 Elementen
Code:
new int[6]
ist der höchste Index 5.
Wenn du also darauf bestehst ein Element mit Index 6 verwenden zu wollen, dann müsstest du ein Array mit 7 Elementen erzeugen.

Was du ausgeben sollst/willst ist dann auch nur der Index des Elementes und nicht dessen Inhalt.

Java:
        int arrayhello[] = new int[7];

        arrayhello[1] = 2;
        arrayhello[2] = 5;
        arrayhello[3] = 1;
        arrayhello[4] = 7;
        arrayhello[5] = 3;
        arrayhello[6] = 4;
        int j=0;

        do
        {
          j++; 
          if (arrayhello[j]==3) {
            System.out.println(j);
            break;
          }
        } while(j<7);
 
Zuletzt bearbeitet von einem Moderator:
Wirklich vielen tausend Dank, speziell du pappawinni.
Eine riesige Stütze!

Lieber Gruß!

---

Nun habe ich ein Problem mit folgendem Vorschlag:

public static void main(String[] args) {

String eingabe = JOptionPane.showInputDialog("Bitte eine Zahl eingeben: ");
Double zahl = Double.parseDouble(eingabe);
String ausgabe = "";

if (zahl >= 0 && zahl <= 10){
ausgabe = "1";
}
if (zahl > 10 && zahl <= 20){
ausgabe = "2";
}
if (zahl > 20 && zahl <= 30){
ausgabe = "3";
}
if (zahl > 30){
ausgabe = ">=4";
}
System.out.println(ausgabe);
//oder
JOptionPane.showMessageDialog(null, ausgabe);

}

Das Programm BlueJ, dass ich zum vereinfachten Arbeiten benutze hat Probleme mit den ersten beiden Zeilen:

String eingabe = JOptionPane.showInputDialog("Bitte eine Zahl eingeben: ");
Double zahl = Double.parseDouble(eingabe);

(Erkennt er nicht - "cannot find symbol")

Mache ich was falsch oder habe beim Übernehmen was vergessen?

Nochmals lieber Gruß!
 
Zuletzt bearbeitet:
Um auf die Klasse JOptionPane zugreifen zu können, musst du sie erst durch eine import-Anweisung am Anfang deiner Klasse für deine Klasse zugänglich machen.

Java:
import javax.swing.JOptionPane;

Warum BlueJ dir die zweite Zeile anstreicht, verwundert mich gerade etwas. Beheb' am Besten erstmal den ersten Fehler und schau dann, ob immer noch ein Wurm drin ist.
 
Hi, ich weiß du hast die Antwort schon, aber evtl siehst du so auch noch einen anderen Ansatz 🙂 (funktioniert übrigens)
Java:
import java.io.*;

public class Eingabeauswertung {
	
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	String eingabe;
	
	public void start() {	
		System.out.print("Zahl eingeben: ");
		
		try {
			eingabe = br.readLine();
			auswertung(eingabe);
		} catch (IOException ioe) {
			System.out.println("keine Zahl eingegeben!");
			System.exit(1);
		}
	}
	
	private void auswertung(String a) {
		int eingabeint = Integer.parseInt(a);		
				
			if(eingabeint >= 0 && eingabeint <= 10 )
				System.out.println("Ergebnis: 1");
			else if(eingabeint > 10 && eingabeint <= 20 )
				System.out.println("Ergebnis: 2");
			else if(eingabeint > 20 && eingabeint <= 30 )
				System.out.println("Ergebnis: 3");
			else if(eingabeint > 30)
				System.out.println("Ergebnis: >=4");
			
			start();
	}
		
	// main
	public static void main(String[] args) {
		Eingabeauswertung ea = new Eingabeauswertung();
		ea.start();
	} 
	
}

ich würde dir zum lernen nicht buleJ empfehlen. Vorallem nicht fürs verstehen von JAVA 🙂)
Nimm eclipse oder notepad
 

Neue Themen


Zurück
Oben