Porównywanie wielu stringów

Porównywanie wielu stringów
TR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 9 lat
  • Postów:9
0

Witam,

Na wstępie zaznaczę, że dopiero zaczynam naukę Javy i to o co proszę może okazać się głupie, jednak zaryzykuję :P Tworzę kod, w którym fragment polega na odczytaniu a później rozbiciu stringów na pojedyncze komponenty:

Kopiuj
// Odczytywanie pól "liczb"
		
		EqOne = tEqOne.getText();
		EqTwo = tEqTwo.getText();
		EqThree = tEqThree.getText();
		EqFour = tEqFour.getText();
		EqFive = tEqFive.getText();
		EqSix = tEqSix.getText();
		EqFinal = tEqFinal.getText();
		
		// Rozdzielenie "liczb" na "cyfry"
		
		String[] comp1 = EqOne.split("");
		String[] comp2 = EqTwo.split("");
		String[] comp3 = EqThree.split("");
		String[] comp4 = EqFour.split("");
		String[] comp5 = EqFive.split("");
		String[] comp6 = EqSix.split("");
		String[] compFinal = EqFinal.split(""); 

Stringi 1-6 mogą się składać maksymalnie z 6 znaków, 7 (Final) maksymalnie 7 znaków.

1 Pomysł:

Czy istnieje metoda, która porówna wszystkie te komponenty i przypisze jednakowym nową zmienną (maksymalnie będzie istnieć 10 zmiennych), którą będę mógł wywołać używając dalej fragmenty stringów comp?

Czyli przykładowo:

string 1: XYZ
string 2: YZX
string 3: ZXY
string final: VXZY

Jak widać od razu: comp1[2]=comp2[1]=comp3[0]=compFinal[1] -> string zmiennaZ?

Stringi będą zamieniane później na int do obliczeń, jeśli to jakoś zmienia sytuację ;)

2 Pomysł:

Druga opcja polegałaby na stworzeniu wcześniej tablicy z 26 zmiennymi. Kod sprawdzałby, które z nich są użyte w stringach i wykorzystaniu tylko tych do dalszych obliczeń. W tym przypadku również istniałoby maksymalnie 10 zmiennych i również "comp będą użyte w dalszej części programu jako int" ;P

Pozdrawiam serdecznie i liczę na dużo cierpliwości czytając moje głupoty :D

edytowany 1x, ostatnio: bogdans
0

nie ogarniam, można jaśniej ?

NZ
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 8 lat
  • Postów:93
0

Na wstępie zaznaczę, że dopiero zaczynam naukę Javy i to o co proszę może okazać się głupie, jednak zaryzykuję

No, brzmi to całkiem głupio. Może po prostu powiedz na czym polega problem (ten, który próbujesz rozwiązać tym kodem, a nie to czego nie umiesz zaimplementować), a nie swoją próbę rozwiązania? Tak będzie prościej, szybciej, lepiej.

TR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 9 lat
  • Postów:9
0

Jak porównać wiele stringów i przypisać tym samym nową zmienną typu int? :P Bo wiem, że musiałbym napisać dużo If/while/equals itd, ale może jest jakiś szybszy i pewniejszy sposób?

TR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 9 lat
  • Postów:9
0
nz napisał(a):

na czym polega problem (ten, który próbujesz rozwiązać tym kodem, a nie to czego nie umiesz zaimplementować), a nie swoją próbę rozwiązania? Tak będzie prościej, szybciej, lepiej.

Staram się napisać solver, do łamigłówki matematycznej. Jeden z jej elementów polega na dopasowaniu odpowiednich cyfr do liter tak aby działanie matematyczne się zgadzało.

Obecnie mam napisany fragment, który odczytuje poszczególne "liczby" i rozbija je na "cyfry", jednak wszystkie one są poukrywane pod literami i potrzebuję coś co porówna wszystkie te fragmenty ze sobą i przypisze im jakiś nowy string. W dalszej części będę chciał stworzyć coś co dopasuje cyfry do liter (nowych stringów), i tak aby równania się zgadzały i wypluje odpowiedź np: A = 0, B = 4, C = 7, D = 5.

edytowany 1x, ostatnio: Troller
PI
"szczytuje" .. no nieźle ;d
TR
"asz mnie musk" boli :P dzięki za uwagę ;)
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

Masz rację, piszesz na razie głupoty.
Wziąłeś trochę za duży problem jak na swój poziom wiedzy.
Spróbuj czegoś prostszego, ew. przeczytaj jakąś książkę (wystarczy jedna) dot. podstaw Javy.

http://helion.pl/ksiazki/java-przewodnik-dla-poczatkujacych-wydanie-vi-herbert-schildt,javpp6.htm
http://helion.pl/ksiazki/java-rusz-glowa-wydanie-ii-kathy-sierra-bert-bates,javrg2.htm
http://helion.pl/ksiazki/java-podstawy-wydanie-ix-cay-s-horstmann-gary-cornell,javpd9.htm

Tu masz opisanych kilka pierwszych kroków w nauce:
http://www.foundbit.com/pl/zasoby/jezyki/java/articles/java-kroki.html

TR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 9 lat
  • Postów:9
0

Dzięki, czytam już Horstmanna ;) Wiem, że ten program może być zbyt trudny jak na moje umiejętności, ale trzeba stawiać sobie wyższe wyzwania :P

Dam może bardziej jasny przykład zadania:

| L | Z | G | Z | Z | I
| L | L | I | S | I | K
| K | G | K | L | Z | S
| Z | Z | Z | K | Z | G

  • | Z | I | S | G | L | G
    L | G | I | L | I | S | I
    Litery, które występują w równaniu: G, I, K, L, S, Z. Cel zadania: dopasowanie tak cyfr 0-9 (bez powtórzeń), aby powyższe równanie się zgadzało.

To co obecnie mam: program interface oraz odczytanie linijek. Co potrzebuję: jak dopasować literki, żeby nie istotne jakie się pojawią program liczył :P Czyli np program wie, że jest 6 liter (w.w.) i nazywa je np. Num1, Num2,...,Num6. Jeśli pojawią się inne lub więcej to i tak dopasuje odpowiednikom Num1, Num2,...,NumX ;]

Pozdrawiam!

sqlka
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Wawa
  • Postów:250
1

Według mnie to nie jest zadanie na javę, tylko algorytmiczne.
Trzeba tu zapewne użyć jakieś sprytnej struktury danych, inaczej trzeba by użyć pętli wielokrotnie zagnieżdżonych, co jest w złym stylu i bez sensu.
Zdecydowanie dla osób sprawnych algorytmicznie, może w dziale algorytmicznym poproś o wskazówki, bo przeciętny javowiec ci nie pomoże.

PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:2787
0

Według mnie pokombinuj trochę z ASCII. Litery potraktuj jako znaki i odejmij od nich 97 (bo tyle ma wartość 'a'), potem może na coś wpadniesz. Oprócz tego jeśli chodzi o "dopasowania" w samej javie no to nasuwa się struktura mapy

pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:18 dni
  • Lokalizacja:Kraków
  • Postów:1055
1

Chwila chwila. Czy ja dobrze rozumiem?
Masz zbiór stringów i chcesz bijektywnie odwzorować te stringi na liczby, tj każdego takiemu samemu stringowi chcesz przyporządkować liczbę tak, żeby dwa różne stringi miały inne liczby. Tak?
Przykład:
"ala" -> 1
"ma" -> 2
"ma" -> 2
"ala" -> 1
"kota" -> 3


do not code, write prose
edytowany 2x, ostatnio: pingwindyktator
TR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 9 lat
  • Postów:9
0

Mniej więcej tak ;) Stringi to pojedyncze litery, a liczby będą musiały się dopasowywać - nie mogą być z góry narzucone (tutaj chcę użyć Math.random()*10 z odpowiednimi ograniczeniami i równaniami).

Na początku napisałem taki właśnie kod do rozwiązywani:

Kopiuj
public class Solverpt4
{
	public static void main (String [] args){
		
		int SumK1 = 10000000;
		int SumK2 = 10000000;
	
		do {
			
		int[] nums = new int[11];
		
		for (int i =1; i<=10; i++){
			nums[i] = i;
		}
		
		for (int i = 1; i<10; i++){
			int r = (int) (Math.random()*10);
			int temp = nums[i];
			nums[i] = nums[r];
			nums[r]=temp;
		
		}
		
		int NumE = nums[0];
		int NumI = nums[1];
		int NumL = nums[2];
		int NumM = nums[3];
		int NumP = nums[4];
		int NumS = nums[5];

		
		SumK1 = NumL*1000000+NumE*100000+NumL*10000+NumS*1000+NumS*100+NumE*10+NumS;
		
		int Sum1 = NumL*100000+NumP*10000+NumP*1000+NumS*100+NumS*10+NumM;
		int Sum2 = NumI*100000+NumS*10000+NumM*1000+NumI*100+NumL*10+NumS;
		int Sum3 = NumE*100000+NumI*10000+NumL*1000+NumL*100+NumP*10+NumI;
		int Sum4 = NumE*100000+NumM*10000+NumE*1000+NumI*100+NumI*10+NumP;
		int Sum5 = NumE*100000+NumI*10000+NumS*1000+NumP*100+NumM*10+NumI;
		
		SumK2 = Sum1+Sum2+Sum3+Sum4+Sum5;
		
		
		
		if (SumK1 == SumK2){
		
			System.out.println("SumK1 = " +SumK1);
			System.out.println("SumK2 = "+SumK2);
			System.out.println("A " + NumE);
			System.out.println("F " + NumI);
			System.out.println("J " + NumL);
			System.out.println("N " + NumM);
			System.out.println("O " + NumP);
			System.out.println("X " + NumS);
		 }
		}
		while (SumK1!=SumK2);
		
		
	}
}

Potem stwierdziłem, że nie mogę za każdym razem zmieniać kodu, i zacząłem pisać ten projekcik :P Mam w głowie wszystko co potrzebuję, tylko utknąłem własnie na etapie zamiany stringów :]

edytowany 2x, ostatnio: Troller
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:18 dni
  • Lokalizacja:Kraków
  • Postów:1055
0

https://pl.wikipedia.org/wiki/Funkcja_skr%C3%B3tu
http://ideone.com/f42kg5
edit: to chyba jednak nie jest rozwiązanie problemu.


do not code, write prose
edytowany 1x, ostatnio: pingwindyktator
TR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 9 lat
  • Postów:9
0

Ok, wymyśliłem częściowe rozwiązanie problemu:

Stworzę 10 pól, w których będzie można umieścić Litery (czyli zmienne). Program przypisuje teraz, że np. zmienna 1 = A, 2 = B, 3 = C, itd - czyli rodzaj literki będzie obojętny:

Solver1.0.png

Teraz jak sprawić, program przypisywał odpowiednie elementy:

Kopiuj
		String[] comp1 = EqOne.split("");
		String[] comp2 = EqTwo.split("");
		String[] comp3 = EqThree.split("");
		String[] comp4 = EqFour.split("");
		String[] comp5 = EqFive.split("");
		String[] comp6 = EqSix.split("");
		String[] compFinal = EqFinal.split("");

czy zwykłe:

Kopiuj
		if (comp1[1].equals(sOne)){
			comp1[1] = sOne;
		}
		else if 

Będzie do tego się nadawało? (tutaj wychodziłoby ponad 400 ifów :P), czy może while/switch?

Pozdrawiam!

edytowany 1x, ostatnio: Troller
0

Nie nadaje się. Nie do końca też rozumiem ale nie może być np:

Kopiuj
int[] tab = new tab[91];
Random rand = new Random();
tab[Character.toUperCase(pole.getString().toCharArray().charAt(0))] = rand.nextInt(10000);

Pisane z głowy mogą być błędy ewentualnie zastosować shuffle

TR
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 9 lat
  • Postów:9
0

Ok, rozwiązałem wszystkie problemy, poza jednym... losowe liczby :P

Kopiuj
do {
	
int[] nums = new int[10];

for (int i =1; i<10; i++){
	nums[i] = i;
}

for (int i = 1; i<10; i++){
	int r = (int) (Math.random()*10);
	int temp = nums[i];
	nums[i] = nums[r];
	nums[r]=temp;

}

zOne = nums[0];
zTwo = nums[1];
zThree = nums[2];
zFour = nums[3];
		
		
		zSum1 = a41*10000+a42*1000+a43*100+a44*10+a45;
		
		zEqOne = a11*1000+a12*100+a13*10+a14;
		zEqTwo = a21*1000+a22*100+a23*10+a24;
		zEqThree = a31*1000+a32*100+a33*10+a34;

		zSum2 = zEqOne+zEqTwo+zEqThree;
		
	
		
		if (zSum1 == zSum2){
			toOne.setText(Integer.toString(zOne));
			toTwo.setText(Integer.toString(zTwo));
			toThree.setText(Integer.toString(zThree));
			toFour.setText(Integer.toString(zFour));	
		}
		}
	while (zSum1 !=zSum2);
	

Czy, ktoś mógłby mi sprawdzić czy wszystko jest ok w tym kodzie? Zmienne a41, a42, a43, itd są przypisane do zOne, zTwo, zThree i zFour do których ma być losowo dobierana liczba 0-9 bez powtórzeń. Bo jeśli tu jest OK, to gdzieś przy przypisywaniu własnie zOne, zTwo, itd do a41, a42,... popełniłem błąd :P

edytowany 1x, ostatnio: Troller
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)