Mavo
-
Postów
12 -
Dołączył
-
Ostatnio
Nigdy
Typ zawartości
Profile
Fora
Kalendarz
Articles
Pliki
Posty napisane przez Mavo
-
-
Wcześniej wspomniałem o użyciu zapisu tablicowego w kontekście wskażników, najlepiej pokaże na przykładzie:
double wyznacznik(double** tab, int i, int j) { return tab[i][j] = 1000; }
Tak jest czytelniej niż tak:
double wyznacznik(double** tab, int i, int j) { return *(*(tab+i)+j)=1000; }
Można też pozbyć się całkowicie wskaźników i pracować na samych tablicach. Aby przekazać taka tablicę do funkcji musisz określić wcześniej jej wielkość, przykład:
double usatwTab(double tab[10][10], int i, int j) { return tab[i][j] = 2.5; }
-
Odwołanie które chcesz zrobić będzie wyglądało tak:
*(*(tab+i)+j) = 1000;
Ale polecam nauczyć się zapisu tablicowego (jest czytelniejsz):
tab[i][j] = 1000;
-
A, że temat mnie zainteresował, to dla ciekawych wrzucam jeszcze to. Kod nie jest doskonały i proszę się nie czepiać :) pisany był w pośpiechu i nie było czasu na zmiany.
import java.util.*; import java.util.Map.Entry; /** * @author Grzegorz */ public class RozkladWykladniczy { private Random t; public HashMap<String, Integer> map; public RozkladWykladniczy() { this.t = new Random(); this.map = new HashMap<>(); } public double generuj(double lambda) { return -(1/lambda)*Math.log(1 - t.nextDouble()); } public void setHistogram(){ /* * tworzony jest obiekt DecimalFormat, * aby łatwo można było formatować generowane wartości * i przy tym obserwować zmiany na histogramie - szoda, * że nie graficznym :) */ java.text.DecimalFormat df = new java.text.DecimalFormat(); df.setMaximumFractionDigits(2);// największa ilość miejsc po przecinku df.setMinimumFractionDigits(2);// najmniejsza ilość miejsc po przecinku String tmp; int value; for(int i=0; i<200; i++) { tmp = df.format(generuj(2)); if(!map.containsKey(tmp)) { map.put(tmp, 1); } else { value = map.get(tmp); map.replace(tmp, value, ++value); } } } public void showHistogram() { if(map.isEmpty()) { System.out.println("Wartość: 0, Wystąpienia : 0"); } else { for (Entry<String, Integer> entry : map.entrySet()) { System.out.println("Wartość : " + entry.getKey() + " Wystąpienia : "+ entry.getValue()); } } } /* * Metodę dodałem, aby łatwiej przeanalizować wyniki */ public void sortujPoWystapieniach() { List list = new LinkedList(map.entrySet()); Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o2)).getValue()) .compareTo(((Map.Entry) (o1)).getValue()); } }); HashMap sortedHashMap = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); sortedHashMap.put(entry.getKey(), entry.getValue()); } map = sortedHashMap; } public static void main(String[] args) { RozkladWykladniczy test = new RozkladWykladniczy(); test.setHistogram(); test.sortujPoWystapieniach(); test.showHistogram(); } }
-
Najlepiej przygotować metodę, która zwróci wartość, a później wywołać ją w pętli np:
public class RozkladWykladniczy { Random t = new Random(); public double generuj(double lambda) { double losowa = t.nextDouble(); return -(1/lambda)*Math.log(1-losowa); } public static void main(String[] args) { RozkladWykladniczy test = new RozkladWykladniczy(); for(int i=0; i<100; i++) { System.out.println(test.generuj(2)); } } }
-
Jest kilka sposobów na odczytanie Twojej liczby. Wszystko zależy od tego jak zapiszesz dane do pliku.
Najprostrzy sposób, to zapisać godzin odjazdów autobusów w liniach przyporządkowanych do godzin, tak aby linia 1 to piersza w nocy , 2 linia = 2 godzina i tak dalej.
Dane z pliku odczytujesz w pętli, do tego wstawiasz licznik, który będzie odliczał linie. I na kniec if -a, w którym będziesz porównywał godzinę podaną przez użytkownika z linią w pliku. Jeśli to ma być 10 godzina, to odczytasz linię 10 z pliku, w której zapiszesz wszystkie godziny odjazdów autobusów od 10 do 11.
Oczywiście są jeszcze inne sposoby odczytania szukanej przez Ciebie liczby, ale na początek ten jest dobry.
-
Komunikacja na pewno przez sockety i trzeba dołączyć obsługę wątków. Aby każdy klient był obsługiwany przez osobny wątek.
http://www.oracle.com/technetwork/java/socket-140484.html
Jeżeli ma być opcja "voice chat" lepiej wybrać protokół UDP.
-
Fajnie, że masz już swój kod teraz można go stopniowo poprawiać.
Przede wszystkim trzeba pozbyć się tego długiego warunku w if, a najlepiej całego if - a. Miałeś dobry pomysł, aby przyjrzeć się funkcji isspace. Zwraca ona wartość różną od zera gdy argument, który został przekazany do funkcji jest "białym znakiem". W praktyce będzie to wyglądało tak:
while(!isspace(tab_tekstow[i-1][0]) && tab_tekstow[i-1][0] != NULL);
Warunek składa się z dwóch części, gdyż dodatkowo trzeba zadbać o przycisk enter
-
Pytanie błache, ale problem już nie :) Przykładowo, jeżeli masz ciąg znaków w stumieniu, to musisz je sprawdzać znak po znaku (!) i jeżeli trafisz na "biały znak" to przerywasz sprawdzanie. Albo zapisujesz cały strumień w zmiennej i już na niej dokonujesz sprawdzenie. Proponuję zapoznać się z cin.get(), cin.getline(). A! znaki może rzutować na int-y, wtedy łatwo się je sprawdza np. spacja to 32.
-
... hm dziwne zadanie, jak na początek nauki. Ten kod kompiluje się bez błędów może Ci pomoże
public class Akwarium { private static class CzyDoplynie { public static boolean rybka1( boolean[][] tablica ) { // todo return false; } } public static void main(String[] args) { // próba wywołania CzyDoplynie.rybka1(new boolean[1][1]); } }
-
Część warunkowa w Twoim wyrażeniu jest poprawna, czyli koniunkcja jest dobrze napisana. Błąd jest w składni wyrażenia, gdyż brakuje elementu, który będzie wykonany jeśli warunek nie będzie spełniony.
Poprawna forma wygląda następujoco:
warunek ? wyrażenie1 : wyrażenie2
Jak widzisz u Ciebie brakuje ostatniej części, jak ją dopiszesz to nie będziesz miał błędu.
-
public class Prostopadloscian {
private int bokA;
private int bokB;
private int bokC;
public Prostopadloscian(int bokA, int bokB, int bokC) {
this.bokA = bokA;
this.bokB = bokB;
this.bokC = bokC;
}
public void pole() {
int s = 2 * ((bokA * bokB) + (bokB *bokC) + (bokA * bokC));
System.out.println("Pole powierzchni = " + s);
}
public void objetosc() {
int v = bokA * bokB * bokC;
System.out.println("Objetosc = " + v);
}
public static void main(String[] args) {
Prostopadloscian figura = new Prostopadloscian(3,3,3);
figura.pole();
figura.objetosc();
}
}
Jak pozbyć się tej anomalii. (if, else if , else) ?
w C++
Napisano
Za trzecim warunkiem masz niepotrzebny ; i powinno być else if