Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

dejot44

Java - problem.

Rekomendowane odpowiedzi

Witam! Mam ostatnio taki problem. Muszę zamienić działanie matematyczne w Stringu na wynik w double. Przykład:

String s = "12.34+2/4";
Double wynik;
wynik = s.to_double;

Jest coś takiego możliwe? Z góry dzięki za pomoc ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jest możliwe. Oczekujesz, że ktoś to za Ciebie napisze, czy zamierzasz sam próbować i szukasz wskazówek?

Raczej szukam wskazówek, bo męcze się z problemem od kilku dni :/

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie jestem Javowcem, ale może w takim razie pokażesz co już napisałeś?

 

Raczej nie napiszesz metody toDouble(), którą zawołasz bezpośrednio na Stringu, pewnie można to wrzucić w jakiegoś "helpera".

 

Co do wskazówek to raczej musisz zacząć od sparsowania tego stringa tak, żeby odzielić liczby od operatorów. Do przeprowadzenia samej operacji polecam zapoznać się z pojęciem Odwrotnej Notacji Polskiej: https://pl.wikipedia.org/wiki/Odwrotna_notacja_polska

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

public class Wynik {
   public int liczba_na_ktorej_konczymy;
   public double wynik = 0;

   public static String usunZnak(String s, int pozycja){
       return s.substring(0,pozycja) + s.substring(pozycja + 1);
   } // usuwa pojedyńczy znak ze stringa
   /***********************************************************************************/

   public void kilkucyfrowe_liczby(String liczby, int pierwsza_liczba) { // pracuje nad liczbami kilkucyfrowymi
       int nr_string = pierwsza_liczba;
       boolean czy_liczba = false;

       while(czy_liczba != true)
       {
           if ((liczby.charAt(nr_string) == '0') || (liczby.charAt(nr_string) == '1')
                   || (liczby.charAt(nr_string) == '2') || (liczby.charAt(nr_string) == '3')
                   || (liczby.charAt(nr_string) == '4') || (liczby.charAt(nr_string) == '5')
                   || (liczby.charAt(nr_string) == '6') || (liczby.charAt(nr_string) == '7')
                   || (liczby.charAt(nr_string) == '8') || (liczby.charAt(nr_string) == '9')) {
           		nr_string++;
               }
           else{
           	czy_liczba = true;
           	if(nr_string == pierwsza_liczba){
           		wynik = 0;
           	}
           	else{
           	wynik = Double.parseDouble(liczby.substring(pierwsza_liczba, nr_string));
           	liczba_na_ktorej_konczymy = (int)nr_string;
           	}
           }
       }
   }
   /***********************************************************************************/
   public void po_kropce(String liczby, int pierwsza_liczba){ //pracuje nad liczbami po kropce
   	int nr_string = pierwsza_liczba;
       boolean czy_liczba = false;

       while(czy_liczba != true)
       {
           if ((liczby.charAt(nr_string) == '0') || (liczby.charAt(nr_string) == '1')
                   || (liczby.charAt(nr_string) == '2') || (liczby.charAt(nr_string) == '3')
                   || (liczby.charAt(nr_string) == '4') || (liczby.charAt(nr_string) == '5')
                   || (liczby.charAt(nr_string) == '6') || (liczby.charAt(nr_string) == '7')
                   || (liczby.charAt(nr_string) == '8') || (liczby.charAt(nr_string) == '9')) {
           		nr_string++;
               }
           else{
           	czy_liczba = true;
           	if(nr_string == pierwsza_liczba){
           		wynik = 0;
           	}
           	else{
           	wynik = Double.parseDouble("0." + liczby.substring(pierwsza_liczba, nr_string));
           	liczba_na_ktorej_konczymy = (int)nr_string;
           	}
           }
       }
   }
   /***********************************************************************************/
}

Sam próbowałem oddzielać liczby od operatorów i na razie tyle zrobiłem. ;)

Co do notacji polskiej to już patrzę :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Przeanalizowałem odwrotną notację polską, wydaje się ok. Potem napiszę, jak coś zrobię, czy mi się udało czy nie. Dzięki ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tutaj kodzik do sparsowania ciągu wejściowego (s) do tablicy liczb i operatorów, może się przyda:

	String s = "12.34+2/4";
	ArrayList<String> items = new ArrayList<String>();
	StringBuilder builder = new StringBuilder();
	for(char c : s.toCharArray()) {
	    if(Character.isDigit(c) || c == '.') {
	        builder.append(c);
	    } else {
	        items.add(builder.toString());
	        items.add(Character.toString(c));
	        builder.setLength(0);
	    }
	}

	if(builder.length() > 0) {
	    items.add(builder.toString());
	}

 

Tak jak pisałem, Javowcem nie jestem, nie wiem czy jakiś "herezji" nie popełniłem, ale jest to trochę bardziej kompaktowe od tego, co napisałeś.

 

EDIT: czyszczenie buildera lepiej zrobić przez

builder.setLength(0);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

if ((liczby.charAt(nr_string) == '0') || (liczby.charAt(nr_string) == '1')
                   || (liczby.charAt(nr_string) == '2') || (liczby.charAt(nr_string) == '3')
                   || (liczby.charAt(nr_string) == '4') || (liczby.charAt(nr_string) == '5')
                   || (liczby.charAt(nr_string) == '6') || (liczby.charAt(nr_string) == '7')
                   || (liczby.charAt(nr_string) == '8') || (liczby.charAt(nr_string) == '9'))

 

ej bez jaj - wystarczy sprawdzić czy ( znak >= '0' ) && ( znak <= '9' ) albo zapewne jest funkcja sprawdzająca czy znak to liczba

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki, udało mi się to zrobić i dokończyłem swój kalkulator na andka ;D

if ((liczby.charAt(nr_string) == '0') || (liczby.charAt(nr_string) == '1')
                   || (liczby.charAt(nr_string) == '2') || (liczby.charAt(nr_string) == '3')
                   || (liczby.charAt(nr_string) == '4') || (liczby.charAt(nr_string) == '5')
                   || (liczby.charAt(nr_string) == '6') || (liczby.charAt(nr_string) == '7')
                   || (liczby.charAt(nr_string) == '8') || (liczby.charAt(nr_string) == '9'))

 

ej bez jaj - wystarczy sprawdzić czy ( znak >= '0' ) && ( znak <= '9' ) albo zapewne jest funkcja sprawdzająca czy znak to liczba

Dzięki za radę, poprawiłem już to w kodzie ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jest więcej tego typu algorytmów, które mogą się przydać programiście? By mi się przydały ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...