[Java] niezrozumiałe błędy w nowej klasie

0

Witam,

Zostało postawione przede mną proste (wydawałoby się) zadanie: Stwórz klasę.
Otóż stworzyłem taką klasę:


public class Okret {

	public static void main(String[] args) {
		
		String typ;
		// (...) <--- tu są inne zmienne

		public Okret (String a) //    <---- tu jest zonk!
		{
			if (a == "Koga")
			{
				// (...) <-- tu są zmienne, wszystko jest ok.		
			}
			else if (a == "Bryg")
			{
				// (...)		
			}

		}
	}
}

no i mam następujące zonki:

na początku konstruktora (zonk) Eclipse mówi mi tak:
Multiple markers at this line
- Syntax error on token ")", ; expected
- Syntax error on token "(", . expected
- Okret.String cannot be resolved to a type
- Illegal modifier for parameter a; only final is
WTF ??

dla sprawdzenia stworzyłem pusty konstruktor:

public Okret () {}

A ten uparcie mi wypisuje:
"Multiple markers at this line
- Syntax error on token "}", delete this
token
- Syntax error on token "public", new
expected"

jak zmieniam na

public Okret (int a)

to mi wypisuje:
Multiple markers at this line
- Syntax error, insert ";" to complete Statement
- a cannot be resolved
- Syntax error on token(s), misplaced construct
(s)
- Syntax error on token "int", delete this token
- Okret.String cannot be resolved to a type
- Syntax error on token "(", . expected
- Illegal modifier for parameter a; only final is
permitted
- Syntax error on token ")", ; expected

moje pytania brzmią:
czemu każe mi kasować } ? przecież musze body zamknąć w {}
czemu każe mi zamienić "public" na "new" ? przecież to jest konstruktor a nie obiekt
czemu Okret.String cannot be resolved to a type ? - czy on się odwołuje do body konstruktora ?

Problem nr 2
tą samą klasę wrzuciłem w taką konstrukcję:

public class Zadanie06 
{
	public static void main(String[] args)
	{
		
		class Okret {
			
			// (...) <--- zmienne

			String[] typy = new String[5]; // <-- "Syntax error, insert "}" to complete ClassBody"

			public Okret(String a) {} // <-- Multiple markers at this line
						// - Syntax error on token ")", ; expected
						// - Syntax error on token "(", . expected

			String getPoziomZagli() // <-- Syntax error on token "String", new expected
			{			// <-- Syntax error on token "{", { expected after this token
				return poziomZagli;
			}
		
		} // <-- Syntax error, insert ";" to complete Statement
	}
}

pomożecie mi rozwiązać te zagadki ?

  1. czy mogę umieścić klasę w klasie ? - czy klasa wewnętrzna musi być wtedy abstrakcyjna ?
  2. czemy Eclipse zgłasza mi jakieś dziwne żądania dot. kasowania { i ( itp skoro są one konstrukcyjnie poprawne ?

z góry dzięki za wyjaśnienia

0

nic dziwnego, że masz błąd - próbujesz zdefiniować konstruktor w metodzie "main"

0

Java (język, w obecnej wersji) nie pozwala na definiowanie wewnątrz funkcji jakichkolwiek funkcji czy klas.

0
tito napisał(a)
  1. czemy Eclipse zgłasza mi jakieś dziwne żądania dot. kasowania { i ( itp skoro są one konstrukcyjnie poprawne ?

Tak się dzieje, gdy programista napisze coś, co kompilatorowi się po prostu w pale nie mieści. Nie wiedząc co autor miał na myśli, nie wie co ma mu odpisać.

0

Wszystko jasne. Dzięki za pomoc.

0

nadal coś jest nie tak

klasa jest prosta jak budowa cepa

no powiedzcie mi teraz o co cho ?
jest to całkowinie odrębna klasa zapisana w pliku Drzwi.java...

import javax.swing.*;
public class Drzwi {
		
		String stan;      // <------------ Multiple markers at this line
	                                     // - Syntax error on token ";", , expected
	                                     // - Syntax error on token ";", , expected
		stan = "zamknięte";

		String getStan() 
		{
			return stan;	
		}
		void otworz()
		{
			this.getStan();
			if (stan == "otwarte")
			{
				JOptionPane.showMessageDialog(null, "Te drzewi już są otwarte");
			}
			else if (stan == "zamknięte")
			{
				stan = "otwarte";
				JOptionPane.showMessageDialog(null, "Drzwi zostały otwarte");
			}
		}
		void zamknij()
		{
			this.getStan();
			if (stan == "otwarte")
			{
				stan = "zamknięte";
				JOptionPane.showMessageDialog(null, "Drzwi zostały zamknięte" );
			}
			else if (stan == "zamknięte")
			{
				JOptionPane.showMessageDialog(null, "Te drzewi już są zamknięte");
			}
		}
		void sprawdzStan()
		{
			this.getStan();
			JOptionPane.showMessageDialog(null, "Te drzwi są " + stan + ".");
		}
}
0

W javie każda klasa publiczna musi byc w nowym pliku ktorego nazwa jest taka sama jak nazwa klasy.

0

Raczej chodzi tutaj o wyrażenie: "stan = "zamknięte";" które jest wrzucone luzem do klasy.

0

nienienie :)
klasa jest w pliku Drzwi.java - tu jest ok
z zapisem "stan = "zamknięte";" tez jest wszystko ok.

żeby był porządek to najpierw deklaruję zmienną "String stan;" a potem nadaje mu wartość "stan = "zamknięte";"
natomiast kompilator wskazuje mi błąd w deklaracji zmiennej.

String stan; // <------------ Multiple markers at this line
// - Syntax error on token ";", , expected
// - Syntax error on token ";", , expected

najśmieszniejsze jest to że jak w tym samym miejscu deklaruje zmienną innego typu np. int a = 5; to kompilator wszystko akceptuje...

0

Napisz sobie:
String t = new String("cos");
lub
String t = "cos"; // wyjątek przeciążonego operatora przez twórców javy

a spróbuj takie coś:
String t;
t = "cos";

Wskaż różnice w działaniu.

0

pierwsze, także nie działa - wywala mi "Syntax error on token ";", , expected"

wg. mnie różnicy w działaniu nie ma
we wszystkich przypadkach następuje stworzenie obiektu typu String (przydział pamięci) a następnie nadanie mu łańcucha "coś".

robiłem już taką składnie
String t;
t = "cos";
i bez problemu kompilator to przyjmował

oczywiście mogę się mylić

0

Porównaj sobie:

public class Main {

    String ciąg = funkcja("Blok inicjujący");

    Main() {
        System.out.println("Konstruktor");
    }

    public static void main(String[] args) {
        new Main();
    }

    String funkcja(String ciąg) {
        System.out.println(ciąg);
        return "funkcja";
    }
}

z:


public class Main {

    String błądSkładniowy;
    błądSkładniowy = "ciąg";

    public static void main(String[] args) {
    }

}

Poza tym masz błąd logiczny: funkcja getStan() ma u ciebie taką samą widoczność jak zmienna stan.

1 użytkowników online, w tym zalogowanych: 0, gości: 1