Pomoc z tablicami w java

0

Na wstępie powiem że z java nie miałem wcześniej żadnej styczności, więc jestem zielony w tym temacie.
Muszę zrobić plik z tablicą w javie który będzie wykorzystywany w menu aplikacji do wypisywania stringów z wierszy tej tablicy (zadanie proste, ale mam z tym problemy :/, możliwe, że dlatego, że z javą wcześniej nie miałem żadnej styczności).
Załączam kod tablicy:
Tab.java

 public class Tab{
	public static void main(string[] args){
string[][] languages = {{"tekst1", "tekst2"},
				{"tekst3", "tekst4"},
				{"tekst5", "tekst6"},
				{"tekst7", "tekst8"}};
	}
}

Eclips wypluwa mi takie błędy:

  • string cannot be resolved to a type - linia 2 i 4
  • Syntax error on token "++", * expected before this token
  • Type mismatch: cannot convert from String to string - linie ze stringami

I zadanie na później (jak plik z tablicą będzie już działał), co trzeba zrobić żeby plik z menu widział plik z tablicą i żeby była możliwość wyświetlania stringów z tablicy w menu?

Bardzo proszę o pomoc i z góry Wam za nią dziękuję.

1

String musisz napisać z dużej litery i średnk po tablicy, poczytaj lepiej troche;

String[][] languages = {{"tekst1", "tekst2"},
{"tekst3", "tekst4"},
{"tekst5", "tekst6"},
{"tekst7", "tekst8"}};

System.out.println(Arrays.deepToString(languages));

0

Bardzo dziękuję za odpowiedź, sporo pomogło :) Średnik był, tylko go nie przekopiowałem (przeoczenie). Zmiana "s" na "S" w stringu wyeliminowało wszystkie błędy za wyjątkiem tego:

  • Syntax error on token "++", * expected before this token - w pierwszej linii, niezależnie od tego czy jest tam tekst w komentarzu czy nie
    nigdzie nie mogę znaleźć o co w nim chodzi.

Kod po poprawie:
Tab.java

// tablica
public class Tab{
    public static void main(String[] args){
String[][] languages = {{"tekst1", "tekst2"},
                {"tekst3", "tekst4"},
                {"tekst5", "tekst6"},
                {"tekst7", "tekst8"}};
    }
}
0

Prawdopodobnie masz błąd w składni, sprwdz klamry czą podomykane.

Powinno to tyglądać jak niżej, z tym że nie wiem jak nazwałeś klase

public class Tablica
{
public static void main(String[] args)
{

   String[][] languages = {{"tekst1", "tekst2"},
            {"tekst3", "tekst4"},
            {"tekst5", "tekst6"},
            {"tekst7", "tekst8"}}; 
   
   System.out.println(Arrays.deepToString(languages));
   
} 

}

0

Był głupi błąd, już rozwiązałem problem tego erroru.
Mama teraz inny problem, mianowicie:
W pliku z menu linijka, w której mam wypisać tekst wygląda tak:

MultilanguageText mt1_mon_0_2=new MultilanguageText( 15, 20, MenuConfig.TEXT_WIDTH, "left", MenuConfig.BIG_BOLD_FONT, "tu ma byc tekst1","tu ma byc tekst2");

A chcę zrobić żeby było tak:

MultilanguageText mt1_mon_0_2=new MultilanguageText( 15, 20, MenuConfig.TEXT_WIDTH, "left", MenuConfig.BIG_BOLD_FONT, languages[0][]);

Tylko nie wiem czy to jest poprawnie.
Przy drugiej wersji, w tej linijce wyrzuca 2 errory:

  • languages cannot be resolved to a variable
  • Syntax error on token "[", Expression expected after this token
    A w pliku z tablicą jest warning:
  • The value of the local variable languages is not used
    W tej linijce:
String[][] languages = {{"text1", "text2"},
...dalszy program...

Bardzo Wam dziękuję za pomoc, bardzo dużo mi pomagacie :)

0

Zmiana na " languages[0][0], languages[0][1]" usuwa błąd:

  • Syntax error on token "[", Expression expected after this token
    A jak mam zadeklarować tą zmienną languages? Proszę o przykład bo próbowałem takich opcji (nie wiem czy są dobre) i nie działa:
  • String[][] languages = new String[][];
  • String[][] languages;
  • languages = new String[][];
0

Deklaruję według tej strony (przykłady deklaracji moich post wyżej), ale to nie pomaga :/ rozumiem że mam deklarować w pliku menu.

0

Niezupełnie wg tej strony zrobiłeś. Przy utworzeniu musisz podać rozmiar tej tablicy, czyli np.

String[][] languages = new String[4][2];
1

nie mam dostepu do kompilatora teraz :) ale chodzi o to, ze zmienna languages musisz miec na tym samym "poziomie" kodu co tą zmienna mt1_mon_0_2.
np:

public class Tablica { 
    public static void main(String[] args) {
       String[][] languages = {{"tekst1", "tekst2"},
                {"tekst3", "tekst4"},
                {"tekst5", "tekst6"},
                {"tekst7", "tekst8"}}; 

       MultilanguageText mt1_mon_0_2=new MultilanguageText( 15, 20, MenuConfig.TEXT_WIDTH, "left", MenuConfig.BIG_BOLD_FONT, languages[0][0], languages[0][1]);
    } 
}

warningiem sie nie przejmuj bo on informuje tylko o tym, ze zrobiles zmienna ktorej nie uzywasz (chociaz defacto powinno ci to pomoc, bo jesli jej uzywasz, ale jednak podpowiada ze nie uzywasz to cos jest nie tak)

jak zrobisz jak wyzej powinny oba problemy zniknac

a tak btw. deklaracji tablicy:
http://stackoverflow.com/questions/1200621/how-to-declare-an-array-in-java

0

azalut bardzo dziękuję, pomogło, jak tablica jest w tym samym pliku to działa, ale muszę to zrobić tak, żeby była ona w oddzielnym pliku i z tym właśnie mam problem.
A druga rzecz:
Ta tablica raz będzie miała 2 kolumny, a raz 3 i wypada zrobić to tak, żeby było wyświetlanych tyle stringów ile jest kolumn w tablicy. Da się to jakoś zrobić? Bo opcja "languages[0][0], languages[0][1]" tego nie załatwi.
To już dwa ostatnie problemy.

1

Chyba ten temat powinien wpaść do newbie

użyj pętli for do rozmiaru tablicy O_o

0

Jeśli chodzi o 2 osobne pliki, możesz zadeklarować tę tablicę na poziomie "statycznej zmiennej klasy" czyli cos takiego:

public class Klasa1{
    public static String[][] languages = {{"tekst1", "tekst2"},
                {"tekst3", "tekst4"},
                {"tekst5", "tekst6"},
                {"tekst7", "tekst8"}}; 
}

i teraz klasa druga, w ktorej "używasz" tej pierwszej

public class Klasa2{
    public static void main(String[] args){
        System.out.println(Klasa1.languages[0][0]);
    }
}

jak walnąłem gdzieś literówkę to wybacz bo pisalem z palca :P

jesli chodzi o podawanie rozmiaru tablicy: tablica nie musi byc wypełniona, jesli zakładasz, że np. max rozmiar to bedzie 3, to daj 3, albo lepiej daj 5 dla przezorności :D najwyzej wrzucisz tylko 2 elementy i tez bedzie działało

dopiero zakumałem co chcesz zrobic :) tak jak kolega wyżej: użyj pętli for. Pomocna bedzie funkcja lenght:

String[] array = new String[10];
int size = array.length;

próbuj i pisz jak wychodzi, a wątek faktycznie proponuje dac do newbie

0

w nawiązaniu do komentarza, żeby skrócić zapis możesz użyć foreach ale cały czas musisz użyć fora, ja innego pomysłu nie mam


  for(String t:languages[0]){
           System.out.print(t);
  }
1

Skoro chcesz zmienny rozmiar tablicy, to już czas się rozglądać za ArrayList:

ArrayList<ArrayList<String>> languages = new ArrayList<ArrayList<String>>();
ArrayList<String> wiersz = new ArrayList<String>();
languages.add(wiersz);
wiersz.add("tekst1");
wiersz.add("tekst2");

ArrayList<String> wiersz2 = new ArrayList<String>();
languages.add(wiersz2);
wiersz2.add("drugi1");
wiersz2.add("drugi2");
wiersz2.add("drugi3");

System.out.println(languages.get(0).get(1) + " " + languages.get(1).get(2));

Co do tego, jak to zrobić, żeby to było w osobnym pliku, dużo zależy od designu tej klasy. Jakie operacje są dostępne itd. Przykładowo może to tak wyglądać (napisane "na kolanie"):
http://ideone.com/CUHv5O

0

Jak deklaruję tablicę w menu w ten sposób:

Tab languages = new Tab();

A tekst wypisuję tak:

MultilanguageText mt1_mon_0_2=new MultilanguageText( 15, 20, MenuConfig.TEXT_WIDTH, "left", MenuConfig.BIG_BOLD_FONT, Tab.languages[0][0], Tab.languages[0][1]);

to wyrzuca mi dwa razy error:

  • languages cannot be resolved or is not a field
    w linijce w której jest to (podkreśla: languages):
MultilanguageText mt1_mon_0_2=new MultilanguageText( 15, 20, MenuConfig.TEXT_WIDTH, "left", MenuConfig.BIG_BOLD_FONT, Tab.languages[0][0], Tab.languages[0][1]);

Czy ktoś jest w stanie powiedzieć mi co robię źle?

PS. Na razie nie zajmowałem się opcją zmiennej ilości kolumn, próbuję rozwiązać problem ze zrobieniem dwóch plików, żeby działało

0

Zawartość pliku Tab.java

public class Tab{
	public static void main(String[] args){
String[][] languages = {{"en1", "fr1"},
				{"en2", "fr2"},
				{"en3", "fe3"},};

Tylko tablica ma ponad 200 wierszy, a nie 3.

1

Zajmij się od początku javą a nie od środka zaczynasz. Nie masz pojęcia czym jest klasa pole metoda, metoda main więc jak chcesz cokolwiek napisać?

dziwisz się że Ci się program wywala jak się odwołujesz do zmiennej lokalnej wewnątrz metody klasy którą zupełnie przez przypadek nazwałeś tak samo jak zmienną o typie klasa (Tab i languages).

Dodatkowo po co Ci funkcja main w klasie Tab skoro to nie jest Twoja klasa główna (tak podejrzewam skoro wywołujesz jej konstruktor gdzieś indziej)

Napisz od początku do końca co byś chciał mieć na to zaliczenie na studia to może ktoś się zlituje i Ci w ramach pomocy napisze od początku do końca

0

To nie na studia, sprawdzają w pracy jak sobie poradzę z czymś, z czym nigdy nie miałem styczności (java) i nie mam po prostu czasu robić teraz kursów javy, bo muszę mieć to zrobione na już.
Chodzi o to że jest plik menu, w którym wyświetlane są komunikaty w dwóch językach za pomocą tego:

MultilanguageText mt1_mon_23 =new MultilanguageText( 15, 20, MenuConfig.TEXT_WIDTH, "left", MenuConfig.BIG_BOLD_FONT, "Welcome, night owl!","Bonsoir cher couche-tard!"); 

takich linijek w kodzie jest ponad 200 i przy zmianie drugiego języka trzeba przejrzeć 2000 linii kodu i zamieniać drugi string na string w innym języku. Zajmuje to bardzo dużo czasu, więc chcieli to zautomatyzować (a przy okazji sprawdzić czy sobie z tym poradzę).
Poprawka ma wyglądać tak, że jest sobie plik z tablicą gdzie pierwsza kolumna to EN, a druga to drugi język (np. FR), a w pliku menu zamiast stringów wpisanych na sztywno, mają być odnośniki do tej tablicy. Przy takiej opcji nie trzeba przeszukiwać 2000 linii kodu menu, tylko edytować drugą kolumnę w tablicy.
Jesteście w stanie mi pomóc? I bardzo przepraszam Was za to, że pytam o jave, a nie umiem w niej programować.

"Dodatkowo po co Ci funkcja main w klasie Tab skoro to nie jest Twoja klasa główna (tak podejrzewam skoro wywołujesz jej konstruktor gdzieś indziej)"
nie wiem po co mi ona, bez niej wywalało błędy - tak jak pisałem wyżej, nie umiem javy, więc mogę robić masę głupich błędów przez to :/

0

Wielkie dzięki wszystkim za pomoc. Zrobiłem tak jak radził twonek w tym poście:
"Da się: http://ideone.com/IaAWGk, ale to jest BARDZO zły design. Zobacz komentarz niżej, też uważam, że powinieś napisać jakie są wymagania co do tej klasy Tab, co ona powinna zrobić itd. żeby ludzie mogli Ci podpowiadać jak ją zaprojektować od nowa. - twonek"
I chyba działa, na razie zostawię tak, a jak nauczę się dobrze javy to poprawię tak, żeby było elegancko :) a opcje z 3 językami zrobiłem tak:

MultilanguageText mt1_mon_0_2=new MultilanguageText( 15, 20, MenuConfig.TEXT_WIDTH, "left", MenuConfig.BIG_BOLD_FONT, tab.languages[0]); 

teraz wypisuje tyle stringów ile jest we wierszu, więc nie trzeba się bawić z forem.
Jeszcze raz bardzo Wam dziękuję za pomoc, bez Was bym sobie nie poradził.
Dziękuję za wszystko i pozdrawiam.

PS. nie wiem jak zaakceptować komentarz użytkownika twonek, więc zaakceptowałem tego posta (jak wiecie jak to zrobić to napiszcie w komentarzu).

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