Wie programmiere ich "Schiffe versenken" in Java?

Ich möchte gerne Schiffe versenken in Java programmieren und komme gerade nicht weiter...

Hier mein Beispiel-code:

import java.util.*;
public class schiffeversenkken {
  
  public static void main(String[] args) {
    Scanner scan = new Scanner (System.in); 
    
    // Hilfsvariablen
    int x = 0 ;
    int y = 0 ;
    int i = 0 ;
    int j = 0 ;
    int s1 = 0 ;
    int s2 = 0 ;
    int s3 = 0 ;
    
    //Spielfeld
    int [][] feld = new int [10][10] ;
    
    // Ausgabe Spielfeld
    
    for(i = 0; i < feld.length; i++){
      for(j = 0; j < feld.length; j++){
        System.out.print(" [ " + feld[i][j] + " ]" + "\t" ) ;
      }
      System.out.println();
    }
    
    // Schiffe platzieren 
    for (s1=0;s1<3 ;s1++ ) {
      System.out.println("x-Koordinate des Schiffes: ");
      x = scan.nextInt() ;
      System.out.println("y-Koordinate des Schiffes: ");
      y = scan.nextInt() ;
      feld [x][y] = 1 ;
    } // end of for
    
    System.out.println("erstes Schiff platziert!");
    System.out.println(" ");
    
    for (s2=0;s2<3 ;s2++ ) {
      System.out.println("x-Koordinate des Schiffes: ");
      x = scan.nextInt() ;
      System.out.println("y-Koordinate des Schiffes: ");
      y = scan.nextInt() ;
      feld [x][y] = 1 ;
    } // end of for
    
    x = 0 ;
    y = 0 ;
    System.out.println("zweites Schiff platziert!");
    System.out.println(" ");
    
    for (s3=0;s3<3 ;s3++ ) {
      System.out.println("x-Koordinate des Schiffes: ");
      x = scan.nextInt() ;
      System.out.println("y-Koordinate des Schiffes: ");
      y = scan.nextInt() ;
      feld [x][y] = 1 ;
    } // end of for
    
    x = 0 ;
    y = 0 ;
    System.out.println("drittes Schiff platziert!");
    System.out.println(" ");
    
    // neues Spielfeld ausgeben
    for(i = 0; i < feld.length; i++){
      for(j = 0; j <feld.length; j++){
        System.out.print("[" + feld[i][j] + "]" + "\t");     
      }
      System.out.println();
      
      
    } // end of main
    
  } // end of class schiffeversenkken
}

Meine Probleme sind jetzt, dass die Schiffe, die ich platziere sehe (Position durch "1" erkennbar, leere Felder gekennzeichnet durch "0" ). Diese möchte ich jedoch verbergen. Ich hab schon drüber nachgedacht es so zu lösen:

Ich vergleiche [x] [y] mit dem Wert "1". Trifft dies zu, lasse ich per System.out.print "feld [x][y] ausgeben (sorry ich kann an dieser Stelle leider keinen Quellcode einfügen :/ )

Das funktioniert leider nicht so, wie ich es mir vorgestellt hab :D

Eine weitere Möglichkeit wäre auch, die Schiffe per Zufall erstellen zu lassen, jedoch weiß ich da auch nicht so genau wie ich das anstellen soll.

Es wäre vermutlich auch mehr als praktisch sämtliche Aktionen in Methoden zu packen, was ich bis jetzt aber noch nicht gemacht habe, da ich relativ unvorbereitet an dieses Pogramm herangetreten bin...

Ich freue mich über schnelle Antworten :)

Schiff, programmieren, Java, get, Array, versenden, Schiffe versenken, Set
Ich muss diesen selbst programmierten Code (Bisektionsverfahren) rekursiv darstellen, jedoch tue ich mir da schwer. Kann mir jemand zur Hand gehen?

public class Bisektion {

public static void main(String[] args) {

    double Nst = bisektion(-10, 10, 0.01);
    System.out.println("Ermittelte Nullstelle: " + Nst);
    System.out.println("Funktionswert an dieser Stelle: " + fkt1(Nst));
    System.out.println();
    double Nst2 = bisektion(-1000, 1000, 0.01);
    System.out.println("Ermittelte Nullstelle: " + Nst2);
    System.out.println("Funktionswert an dieser Stelle: " + fkt2(Nst2));

}

// Test Funktionen
public static double fkt1(double x) {

    double fx;
    //fx = x * x * x - 24 * x * x + 59 * x + 420;
    fx = x + 5;
    return fx;
}

public static double fkt2(double x) {

    double fx2;
    fx2 = -1/Math.exp(x) + 1e20;

    return fx2;
}

public static double bisektion(double lower, double upper, double epsilon) {

    double mid = lower;
    double width = upper - lower; //20
    // Intervall
    while (width > epsilon) { //20 > 0.1

        mid = (lower + upper) / 2;//0   //-5
        if (fkt1(lower) * fkt1(mid) <= 0) { // if root is in [lower, mid]    //-5 * 0
            upper = mid;                    // move upper left               //upper = 0
        } else {                            // else root is in (mid, upper]
            lower = mid;                    // move lower right
        }
        width = upper - lower;                                               //width = 10
        System.out.println("root = " + mid );
    }
    return mid;
}

} // f(lower)<0 und f(upper)>0 // f besitzt nullstelle im Intervall [lower,upper] // middle // entweder lower oder upper durch ein kriterium mit middle ersetzen // stoppen wenn funktionswert näherungsweise 0 ist // ==> betrag kleiner als vorgegebene zahl epsilon

programmieren, Java
wie berechne ich das Produkt eines Arrays?

Ich habe echt alle jetzt hinbekommen aber jetzt fehlt mir das Produkt ich wollte das so machen

int produkt = 0;

produkt *= Array[i]; system.out... (produkt);

aber da kommt immer ein Fehler in der console undzwar :** Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at Array.main(Array.java:36) 0**

hier erstmal mein Code import java.util.Scanner;

public class Array {

public static void main(String[] args)
{
    // TODO Auto-generated method stub
    {
        Scanner input=new Scanner(System.in);
        int summe=0;
       

        System.out.print("Wie groß soll das Array sein?");
        int Arraygroeße=input.nextInt();

        int Array[]=new int[Arraygroeße]; // erstellt ein Array mit der
                                          // Größe
                                          // die man eingibt

        int i;
        for (i=0; i<Array.length; i++)
        {
            System.out.print("Feldwert an Stelle "+i+" eingeben: ");
            Array[i]=input.nextInt(); // soll den Wert einlesen den der
                                      // Nutzer
                                      // haben möchte bis das ganze Array
                                      // ausgefüllt ist
        }

        for (i=0; i<Array.length; i++)



            summe+=Array[i];
        System.out.println("Die Summe ist :"+summe);

        int max=Array[0];
        for (i=0; i<Array.length; i++)
            if (max<Array[i])
                max=Array[i];

        System.out.println("Größter Wert des Arrays ist "+max);

        int min=Array[0];
        for (i=0; i<Array.length; i++)
            if (min>Array[i])
                min=Array[i];

        System.out.println("Kleiner Wert des Array ist "+min);

        double mittel=0; // Mittelwert auf 0 setzen
        mittel=summe/Array.length; // Mittelwert berechnen durch Summe
                                   // geteielt durch die Anzahl der Zahlen
                                   // im Array
        System.out.println("Der Mittelwert beträgt:  "+mittel);
        
       
        input.close();

    }
  }
}

kann mir jemand bitte helfen wie ich das Produkt berechnen kann ? ( Java)

PC, Computer, Programm, programmieren, Java, Praktikum
Ubuntu: sudo apt-get upgrade , schlägt Fehl?

Ich hab heute einfach mal wieder in der Konsole meine Updates und Upgrades laufen lassen wollen. Nach dem ich "sudo apt-get upgrade" eingegeben hab schlug es fehl und mir ist nicht ganz klar wieso. (Habe Ubuntu 14.04 LTS 3)

Hier mal alles nach der eingabe von "sudo apt-get upgrade":

fabian@fabian-MS-7373:~$ sudo apt-get upgrade
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Probieren Sie »apt-get -f install«, um dies zu korrigieren.
Die folgenden Pakete haben unerfüllte Abhängigkeiten:
 openjdk-7-jre : Hängt ab von: openjdk-7-jre-headless (= 7u85-2.6.1-5ubuntu0.14.04.1) aber 7u79-2.5.6-0ubuntu1.14.04.1 ist installiert
E: Unerfüllte Abhängigkeiten. Versuchen Sie, -f zu benutzen.

Und nun wenn ich den empfohlenen befehl "sudo apt-get -f install" mache oder "sudo apt-get -f upgrade" oder "sudo apt-get upgrade -f" kommt das :

fabian@fabian-MS-7373:~$ sudo apt-get upgrade -f
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Abhängigkeiten werden korrigiert ... Fertig
Paketaktualisierung (Upgrade) wird berechnet... Fertig
Die folgenden Pakete werden aktualisiert (Upgrade):
  openjdk-7-jre-headless
1 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
2 nicht vollständig installiert oder entfernt.
Es müssen noch 0 B von 41,4 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 92,2 kB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n] 
(Lese Datenbank ... 323943 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../openjdk-7-jre-headless_7u85-2.6.1-5ubuntu0.14.04.1_i386.deb ...
Entpacken von openjdk-7-jre-headless:i386 (7u85-2.6.1-5ubuntu0.14.04.1) über (7u79-2.5.6-0ubuntu1.14.04.1) ...
dpkg-deb (Unterprozess): Archiv-Element wird dekomprimiert: lzma-Fehler: komprimierte Daten sind beschädigt
dpkg-deb: Fehler: Unterprozess <Dekompression> gab den Fehlerwert 2 zurück
dpkg: Fehler beim Bearbeiten des Archivs /var/cache/apt/archives/openjdk-7-jre-headless_7u85-2.6.1-5ubuntu0.14.04.1_i386.deb (--unpack):
 Extrahierte Daten für »./usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/client/libjvm.so« können nicht nach »/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/client/libjvm.so.dpkg-new« kopiert werden: Unerwartetes Ende der Datei oder des Datenstroms
E: Sub-process /usr/bin/dpkg returned an error code (1)
fabian@fabian-MS-7373:~$ 

Bitte um Hilfe!

Linux, Konsolen, Java, Ubuntu, Update, Error, Upgrade, apt-get
Gibt es eine Methode in Java, mit der Tastendruck abgefragt werden kann?

Guten Abend,

ich arbeite momentan an einem Projekt für die Schule, nämlich Pong (https://de.wikipedia.org/wiki/Pong), für welches ich die sogenannte Shapes and Sprites Bibliothek verwende, welche für zweidimensionale Projekte im Rahmen des schulischen Unterrichtes gedacht ist.

Soo, nun habe ich das grundlegende Spiel fertig programmiert und bin gerade dabei, einige neue Features zu implementieren, zu denen unter Anderem ein Computergegner gehört. Um das zu realisieren habe ich mir gedacht, dass wenn der Benutzer die Taste c drückt, der rechte Schläger nicht mehr über die Pfeiltasten (Über diese wird der Schläger nämlich bedient) erreichbar ist. Nun besteht die Möglichkeit, mittels der Methode tastaturobjekt.isPressed('c') abzufragen, ob die Taste c gedrückt wird.

Nun habe ich sowohl mit einem Integer computer = 0, dessen Wert einfach um 1 erhöht wird, wenn c gedrückt wird, als auch mit einem Boolean, über eine If-Verzweigung mit der Bedingung, dass der Integer-Wert = 0 bzw der Boolean istGedrueckt = false ist, den Schläger angewiesen, bei Druck der Pfeiltaste gedrückt zu werden, also quasi wie folgt:

 if(tastatur.down() && schläger2.getShapeY()<495 && (istGedrueckt == false)){
        schläger2.move(0,10);
    }

(getShapeY gibt hierbei die Y-Koordinate des Objekts an)

Nur leider besteht hierbei das Problem, dass der Schläger nur dann nicht mehr manuell bewegt werden kann, wenn C tatsächlich gedrückt gehalten wird und nicht nach einmaligem Druck. Deshalb lautet meine Frage, ob das JDK vielleicht eine Möglichkeit mit sich bringt, nach Möglichkeit ohne zehntausend andere Bibliotheken, einen Tastendruck zu überprüfen.

Das soll keine Bitte sein, meine Hausaufgaben zu erledigen, ich will keinen konkreten Quelltext für mein Projekt, sondern bitte einfach nur eine Antwort auf diese mehr oder weniger (ich hoffe) simple Frage, da Google mir dabei leider keine besonders hilfreichen Ergebnisse geliefert hat.

Liebe Grüße, Adrian.

Schule, programmieren, Java, Informatik
BlueJ - illegal start of expression. Wo liegt der Fehler?

Hallöchen, wir habe in der Schule vor kurzem mit dem Programmieren angefangen und dazu benutzen wir "BlueJ" und die Klassenbibliothek "Stifte und Mäuse".

Nun habe ich allerdings ein Problem und weiß nicht mehr weiter: In der Klasse Polygon bekomme ich in der Zeile mit "public void zeichne()" eine Fehlermeldung und zwar "illegal start of expression".

import sum.kern.*;

public class Polygon
{
    // Referenzen
    Stift meinStift;
    Polygon meinPolygon;
    Polygon meinPolygon1,meinPolygon2;

    // Konstruktor
    public Polygon(int pN,int pLaenge,int pHPosition,int pVPosition,int pWinkel)
    {
        // Objekte
        meinStift = new Stift();
        this.zeichne(pN, pLaenge, pHPosition, pVPosition, pWinkel);

        // Methoden
        public void zeichne() 

        meinStift.bewegeBis(pHPosition,pVPosition);
        meinStift.dreheUm(pWinkel);
        meinStift.runter();
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);

        meinStift.bewegeBis(pHPosition,pVPosition);
        meinStift.dreheUm(pWinkel);
        meinStift.runter();
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
    }
}

Und die oben genannte Klasse Polygon soll auf die Klasse Steuerung "basieren". Liegt vielleicht hier der Fehler?

import sum.kern.*;

public class Steuerung
{
    // Referenzen
    Bildschirm meinBildschirm;

    // Konstruktor
    public Steuerung()
    {
        // Instanzvariable initialisieren
        meinBildschirm = new Bildschirm(800, 800);

        //methoden

        meinStift.bewegeBis(pHPosition,pVPosition);
        meinStift.dreheUm(pWinkel);
        meinStift.runter();
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);

        meinStift.bewegeBis(pHPosition,pVPosition);
        meinStift.dreheUm(pWinkel);
        meinStift.runter();
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
        meinStift.dreheUm(-120);
        meinStift.bewegeUm(pLaenge);
    }
}

Ich würde mich sehr freuen, wenn mir jemand helfen würde.

Schule, programmieren, Java, BlueJ, Fehlermeldung
Java-Ausgabe rechtsbündig machen?

Hallo,

ist es möglich die Ausgabe rechtsbündig zu machen (siehe Screenshot) Code:

import java.text.DecimalFormat;

public class Aufgabe1 {

public static void main(String[] args) {
    DecimalFormat myFormat = new DecimalFormat("##,000.00");



    final double zinsenProzent = 0.04; 
    final double lottogewinn = 90000; 
    final double rateMonat = 1000; 
    final double rateJahr = rateMonat * 12; 
    double zinsenEUR = 0;
    double zinsenMonat = 0;
    double lottogewinnReduziert = lottogewinn;
    double aktuellesVermoegen = lottogewinn;


    int monatsZaehler = 0;
    int jahresZaehler = 0;
    double zinsenNormal = zinsenProzent * 100;


    System.out.println("Auszahlungsplan fuer Anlagekapital " + myFormat.format(lottogewinn)
            + " EUR und Zinssatz von " + zinsenNormal + "%");
    System.out.println("Monatlicher Entnahmebetrag: " + myFormat.format(rateMonat) + " EUR \n");
    System.out.println("Jahr \t \t Rate pro Jahr \t Zins pro Jahr \t Aktuelles Vermoegen");
    while (aktuellesVermoegen > 0 && jahresZaehler < 100) {

        monatsZaehler = monatsZaehler + 1;           
        if (monatsZaehler <= 12) {
            zinsenEUR = lottogewinnReduziert * zinsenProzent / 12;
            zinsenMonat = zinsenEUR + zinsenMonat;
            lottogewinnReduziert = lottogewinnReduziert - rateMonat;
            aktuellesVermoegen = lottogewinnReduziert + zinsenMonat;
        }


        if (monatsZaehler == 12) {
            monatsZaehler = 0;
            jahresZaehler = jahresZaehler + 1;
            lottogewinnReduziert = aktuellesVermoegen; 


            System.out.println(+jahresZaehler + ". Jahr \t " + myFormat.format(rateJahr) + " \t "
                    + myFormat.format(zinsenMonat) + " \t " + myFormat.format(aktuellesVermoegen) + "");
            zinsenMonat = 0;

        }
    }

    System.out.println("Kapitalverzehr nach " + jahresZaehler + " Jahren " + monatsZaehler + " Monat(en)");
}}

Geht wohl irgendwie mit %F oder so...kriege das aber nicht hin. Bitte um Hilfe. LG

Bild zum Beitrag
programmieren, Java
Wie sieht die Punktnotation in Java aus oder wie kann ich auf auf andere Klassen zugreifen?

Wie kann ich in der Klasse Telefon die Methoden aus der Klasse Telefonbuch verwenden ? Wenn ich es mit Punktnotation versuche wie z.B.

public void eintrag_hinzufuegen(String name)
{
    Telefonbuch.hinzufuegen(name);
}

, kommt die Fehlermeldung : non static method cannot be referenced from a static context

1)

import java.util.ArrayList;
public class Telefon
{
protected ArrayList <Telefonbuch> telefonbuch;
protected boolean eingeschaltet;
        
        public Telefon()
    {
        // initialise instance variables
        telefonbuch = new ArrayList <Telefonbuch>();
    }
    
    public void anrufen (String name)
    {
    }
    
    public void einschalten()
    {
        eingeschaltet = true;
    }
    
    public void telefonbuch_uebersicht()
    {
        
    }
    
    public void eintrag_hinzufuegen(String name)
    {
    }
    
    public void eintrag_entfernen(String name)
    {
    }
    
    public boolean eintrag_suchen(String name)
    {
    }
}

2)

import java.util.Arrays;

/**
 * Write a description of class Telefonbuch here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Telefonbuch
{
    // instance variables - replace the example below with your own
    private int anzahl_eintrag;
    private int kapazitaet;
    private String[] name_liste;
    protected boolean gefunden;

    /**
     * Constructor for objects of class Telefonbuch
     */
    public Telefonbuch()
    {
        // initialise instance variables
        String [] name_liste = new String[kapazitaet];
        gefunden = false;
    }
    
    public void set_kapazitaet(int x)
    {
        kapazitaet = x;
    }
    
    public void telefonbuch_uebersicht()
    {
        for(int i=0; i < name_liste.length; i++)
        {
        System.out.println(name_liste[i]);
        }
    }
    
    public void hinzufuegen(String name)
    {
        
    }
    
    public void entfernen(String name)
    {
    }
    
    public boolean suchen(String name)
    {
        for(int i=0; i < name_liste.length; i++)
        {
         if(name_liste[i].equals(name))
         {
         gefunden = true;
         }
         else
         {
         //Abbruch
         }
        }
        return gefunden;
    }
}

programmieren, Java, Informatik

Meistgelesene Beiträge zum Thema Java