Przekazywanie String'ów między metodami

0

Nie wiem co należy napisać zamiast void aby metoda zwracała Stringa.

Poniższy zapis jest błędny.

public class Testowa{

String test(){
    String a = "test";

    return a;
}}

public class Inna{
public static void main(String args[]){
Testowa nowa = new Testowa();
nowa.test();
System.out.println(nowa.a);}}

Błąd: cannot find symbol variable a

0

Masz błąd w metodzie main(). Powinno być tak:

public class Testowa{
         String test(){
                String a = "test";                
                return a;
        }}
public class Inna{
    public static void main(String args[]){
            Testowa nowa = new Testowa();
            System.out.println(nowa.test());}}

Teraz powinno wypisać słowo test.

0

Faktycznie wypisało, jednak potrzebuję dostać się do stringa przez jego nazwę. Moja rzeczywista metoda powinna zwracać kilka różnych stringów i potrzebuję mieć do nich osobny dostęp. Metoda może zwracać kilka wartości, prawda? [???]

0

Metoda może zwracać kilka wartości, prawda?

Raczej nie prawda...
W klasie Testowa możesz zrobić pola tekstowe publiczne i odwoływać się do tych pól, lub prywatne i dopisać metody zwracające wartości tych pól. To drugie rozwiązanie wydaje się być bardziej powszechne.

0

1)Jesli wartosci te nie maja "czesci wspolnej" -> napisz osobne gettery
2)jesli tworza jakas logiczna calosc -> byc moze trzeba przemyslec opakowanie ich jakas klasa?

pozdrawiam

0
eximius napisał(a)

1)Jesli wartosci te nie maja "czesci wspolnej" -> napisz osobne gettery

gettery? Nie bardzo rozumiem o co chodzi

0

metody "getSomething()"

pozdrawiam

0

@Anonimka23, zmienna a którą masz w metodzie test() jest widoczna, czyli można się do niej odwoływać tylko we wnętrzu metody test().
Podstawowy błąd polega na tym iż chcesz odwołać się do zmiennej, która jest niewidoczna na zewnątrz funkcji.
Najprostszym rozwiązaniem jest stworzenie nowej zmiennej do której zostanie przypisany wynik działania funkcji:

public class Testowa{
         String test(){
                String a = "test";               
                return a;
        }}
public class Inna{
    public static void main(String args[]){
            Testowa nowa = new Testowa();
            String noweA = nowa.test();
            System.out.println(noweA);}}

Metody zwane getterami i setterami (czasami też metodami wybierającymi i ustawiającymi) to metody, które pozwalają na kontrolowany dostęp do pól obiektów. W swojej najprostszej formie wydaja się niepotrzebne, lecz czasami znacznie ułatwiają życie.
Przykład klasy z jednym polem i odpowidnim getterem i setterem:

class Przyklad{
   private Object zmienna;
   public Object getZmienna(){
      return zmienna;
   }
   public void setZmienna(Object zmienna){
      this.zmienna = zmienna;
   }

}

Jak widzisz pole zmienna jest prywatne i tym samym niewidoczne nigdzie indziej poza klasą. Jednak masz dwie metody getZmienna() i setZmienna(), które pozwalają i pośredniczą w pobieraniu i ustawianiu wartości pola.

0

Hej koziołek mam taki problem, piszę program na prace licencjacką - troche wyciąłem nie potrzebnego kodu ale zetknąłem sie z takim problemem:
Chce korzystać z wartości zmiennych w geterze ale z poziomu innych klas.
Proszę o pomoc.

public class KlasaMain extends JPanel implements ActionListener {
public static JFrame frame;
private JMenuItem menuPlikAudio;
private JMenuItem menuPlikNoise;
public String fileType;
public Thread watekReadWave;
public Thread watekPlayWave;

public static void main(String[] args) {
    KlasaMain obiekt = new KlasaMain();
    obiekt.initGUI();
}

    public void initGUI() { 
[...]
    JMenuBar menuBar = new JMenuBar();  
    JMenu menuPlik = new JMenu("Plik"); 
    menuPlik.setMnemonic(KeyEvent.VK_P);
    menuBar.add(menuPlik);
        menuPlikAudio = new JMenuItem("Otwórz Plik Dźwiękowy (WAVE)");
        menuPlikAudio.addActionListener(this);
        menuPlik.add(menuPlikAudio);    //dodanie pozycji do menu

        menuPlikNoise = new JMenuItem("Otwórz Plik Szumu (WAVE)");
        menuPlikNoise.addActionListener(this);
        menuPlik.add(menuPlikNoise);
[...]   
}   

//Interfejsy nasłuchu
public void actionPerformed(ActionEvent e){

     if (e.getSource() == menuPlikAudio) {  //KlasaOpenAudio
         setFileType("audio"); //<span style="color: blue"><------- PRZYPISUJĘ</span>
         KlasaOpenAudio obiektOpen = new KlasaOpenAudio();
         Thread watekOpenAudio = new Thread(obiektOpen);     
         System.out.println("KlasaMain: " + getFileType());  //<span style="color: green"><-- TU JEST OK</span>
         watekOpenAudio.start();
     }

     if (e.getSource() == menuPlikNoise) {  //KlasaOpenAudio
         setFileType("noise");
         KlasaOpenAudio koa = new KlasaOpenAudio();
         Thread watekOpenAudio = new Thread(koa);    
         watekOpenAudio.start();
     }
}

public void setFileType(String s){
    fileType = s;
}
public String getFileType(){
    return fileType;
}

}

##############################################33

public class KlasaOpenAudio implements Runnable {
private File openFile;
public String dialog;
public KlasaMain obiektMain = new KlasaMain();

public void run()  { 
    openFile(); 
}

public void openFile() { //<--- I TU WLAŚNIE SA JUŻ NULLE
    if (obiektMain.getFileType() == "audio"){  //<span style="color: red"><-- ŻADEN WARUNEK SIE NIE ZGADZA</span>
        dialog = "Wybierz zakłócony plik muzyczny...";
    }else if (obiektMain.getFileType() == "noise"){
        dialog = "Wybierz plik szumu...";
    }
[...]

}

Ogólnie to jest jeden rodzaj zmiennej, chce jeszcze przekazac zmienną typu File w podobny sposob, a takze uzywac tych zmiennych jeszcze w kliku innych klasach, nie wiem jak rozwiązać taki problem, proszę o pomoc.
</b>

0

.equals("audio")

pozdrawiam

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