[JAVA] Grundlagen der bedingten Verzweigung und Rückkehr

Ich war besorgt, weil ein Fehler auftreten würde, wenn ich nicht von dem mysteriösen bedingten Zweig zurückkehren würde

Wenn ich Code mit einer if-Anweisung schrieb, war ich oft wütend auf Eclipse, der sagte: "Es gibt keine Rückkehr !!". Aber ich weiß nicht warum. .. ..

Um primitiver zu denken, habe ich eine Methode geschrieben, die die größere zurückgibt, wenn zwei Argumente vom Typ int übergeben werden (es ist eine Aufnahme mit der Funktion max, aber ich habe mit einem leicht verständlichen Beispiel experimentiert. Weil ich wollte).

//Code 1

public class BiggerNumber {

	public static void main(String[] args) {
		//TODO automatisch generierter Methodenstub
		System.out.println(returnBiggerNumber(250,500));
	}

	public static int returnBiggerNumber(int num1,int num2) {
		if (num1 < num2) {
			return num2;
		}else if (num1> num2 ) {
			return num1;
		}else if (num1 == num2) {
			return num1;
		}else {             //← Das!
			return num1;
		}
	}
}

Es war das letzte, was ich nicht verstehen konnte. Wenn Sie dies nicht schreiben, wird ein Kompilierungsfehler angezeigt. .. ..

Für diese sehr einfache Methode gibt es nur drei mögliche Zweige.

  1. num1 ist größer
  2. num2 ist größer
  3. num1 und num2 sind gleich

Theoretisch sollte dies alle Möglichkeiten abdecken. .. .. Ich sollte in der Lage sein, die im Argument enthaltene Nummer zurückzugeben Gibt es eine andere Möglichkeit? Ich war besorgt.

Ursache und wie man darauf basierend schreibt

Als ich einen Senior mit einer langen Geschichte von Java nach der Ursache des Fehlers fragte, ** "Der Compiler kann nicht ausnahmslos feststellen, ob alle bedingten Zweige geschrieben sind. Selbst wenn es sich um einen bedingten Zweig handelt, der tatsächlich nicht erreicht werden kann, muss er daher formal geschrieben werden. 』** ist das, was sie sagten.

"Das war's!"

Wenn ja, ist die einzige Möglichkeit der Verzweigung außer <,> ==. Es ist möglicherweise nicht erforderlich, den bedingten Ausdruck von == zu schreiben. Also (ich) das erste, was mir in den Sinn kommt, ist dies.

//Code 2

	public static int returnBiggerNumber(int num1,int num2) {
		if (num1 < num2) {
			return num2;
		}else if (num1> num2 ) {
			return num1;
		}else {
			return num1;
		}
	}

Oder gibt es das auch.

//Code 3

	public static int returnBiggerNumber(int num1,int num2) {
		if (num1 < num2) {
			return num2;
		}else if (num1> num2 ) {
			return num1;
		}
		return num1;
	}

Es fühlt sich ein wenig seltsam an, aber das ist auch effektiv. Ist das Geschmackssache?

//Code 4

	public static int returnBiggerNumber(int num1,int num2) {
		if (num1 < num2) {
			return num2;
		}else if (num1> num2 ) {
			return num1;
		}else if (num1 == num2) {

		}
		return num1;
	}

Verwechselt mit Swifts Schalter {case} (halb als persönliche Notiz)

Erstens sollte es kein Problem geben, da wir für alle Muster zurückkehren können! Ich war überzeugt, dass es an ** Swifts Switch-Anweisungsregeln ** lag.

Dies ist das. ** "Gibt es eine case-Klausel, die alle möglichen Werte des dem Schalter zugewiesenen Werttyps abdeckt? Die Standardklausel muss vorhanden sein. 』** (* Übrigens ist es in Java nicht erforderlich, und es ist auch in if-Anweisung nicht erforderlich, selbst mit demselben Swift)

Nein, ** Dies ist eine Geschichte, die nichts mit dem Rückgabewert zu tun hat. .. .. ** Ich hatte ein Missverständnis.

Ob es sich um eine Java-switch-Anweisung, eine schnelle if-Anweisung oder eine switch-Anweisung handelt, Wenn es sich um eine Funktion / Methode handelt, die einen Rückgabewert zurückgibt, müssen alle Werte zurückgegeben werden.

Nur für den Fall zum Beispiel

public int returnTest(int i) {
	switch (i) {
	case 1:
		return 1;
	case 2:
		return 2;
	case 3:
		return 3;
     //Auf diese Weise müssen Sie return außerhalb des Standard- oder Switch-Blocks schreiben.
     //In Kürze verursacht diese Schreibmethode einen Fehler. Schreiben Sie ihn daher außerhalb des Schalterblocks.
	default:
		return 4;
	}
}

Dies ist eine gängige Regel, aber es scheint, dass sie aufgrund halbfertiger sprachspezifischer Regelkenntnisse nicht organisiert werden konnte.

Ich war also vorerst überzeugt, aber ich würde es begrüßen, wenn Sie einen Kommentar abgeben könnten, wenn Sie Tsukkomi oder + α haben.

Recommended Posts

Grundlagen der bedingten Verzweigung und Rückkehr
Dies und das der bedingten Verzweigung der Schienenentwicklung
Java (bedingte Verzweigung und Wiederholung)
Grundlagen der Java-Entwicklung ~ So schreiben Sie ein Programm (Ablauf und bedingte Verzweigung) ~
Grundlagen von Ruby
Ruby on Rails ~ Grundlagen von MVC und Router ~
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
Grundlagen der Try-with-Resources-Anweisung
Kalenderimplementierung und bedingte Verzweigung im einfachen Kalender von Rails Gem
Ich habe die Typen und Grundlagen von Java-Ausnahmen zusammengefasst
[Ruby] Klassenverschachtelung, Vererbung und die Grundlagen des Selbst
Bedingte Java-Verzweigung: Erstellen und Studieren von switch-Anweisungen
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Was ich in Java gelernt habe (Teil 4) Bedingte Verzweigung und Wiederholung
Einrichten von JMeter und jEnv
[Rails] Einführung in die Grundlagen der Entwicklung
Hintergrund und Mechanismus des Stoffladers
Docker-Überwachung - Erläuterung der Grundlagen der Grundlagen
Zusammenfassung von FileInputStream und BufferedInputStream
[GCD] Grundlagen der DispatchQueue-Klasse
Grundlagen der Zeichenoperation (Java)
Kombination von Suche und jedem_mit_Index
Urteil von JSONArray und JSONObject
Zusammenfassung der Grundlagen der Java-Sprache
Rest- und Leistungstreiber (冪 Leistung)
Vor- und Nachteile von Java
Grundlagen der Java-Entwicklung ~ Schreiben von Programmen (Variablen und Typen) ~
Sammlung ausgewählter Programmieraufgaben zum Erstellen und Erinnern (Java-Grundlagen)
Erstellen eines gemischten bedingten Ausdrucks von Rails if-Anweisung und sofern nicht
[Rails] Lesen Sie das RSS der Site und geben Sie den Inhalt an die Vorderseite zurück