Wróć   polish:Elite:board > hard- i software > programowanie
programowanie języki, projekty, pomoc, oprócz html, php, js

Odpowiedz
 
LinkBack Narzędzia wątku Przeszukaj ten temat Wygląd

  #1 (permalink)  
Stare 19.11.2012, 00:19
Avatar sirastral
Member
 
Zarejestrowany: Nov 2011
Postów: 64
Postów w giełdzie: 0
Domyślnie Zapis char w int z zachowaniem wartości

Witam
Czy istnieje jakaś metoda przy pomocy której do int możemy zapisać wartość char zawierający znak cyfry, oraz string zawierający kilka cyfr, z zachowaniem abstrakcyjnej wartości tych znaków?

  #2 (permalink)  
Stare 19.11.2012, 00:24
Senior Member
 
Zarejestrowany: May 2008
Postów: 514
Postów w giełdzie: 0
Domyślnie Odp: Zapis char w int z zachowaniem wartości

Chodzi ci o konwersję string/char do integer? Zerknij na Integer.valueOf(). Jest to odpowiednikiem new Integer(Integer.parseInt(s)). Jeśli masz char, to Integer.valueOf("" + c ); gdzie c to twój char.

  #3 (permalink)  
Stare 19.11.2012, 01:32
Avatar sirastral
Member
 
Zarejestrowany: Nov 2011
Postów: 64
Postów w giełdzie: 0
Domyślnie Odp: Zapis char w int z zachowaniem wartości

OK. działa, ale mam jeszcze pytanie

Kod który napisałem aby zastosować w praktyce przez ciebie rozwiązanie ma postać ma postać:
Java code
1
2
3
4
56
7
8
9
1011
12
13
14
1516
17
18
19
2021
22
23
24
2526
27
public class test {
 
        /**
         * @param args
         */        public static void main(String[] args)
                        throws java.io.IOException
                        {
                // TODO Auto-generated method stub
char x;int y;
x= (char)System.in.read();
try
{
y=Integer.valueOf("" + x );}
catch(NumberFormatException)
{
        System.out.println("bledny znak");
        return;}
System.out.println(y);
System.out.println(x+4);
System.out.println(y+4);
                                                }
}
Na przykład dla podanej wartości 4, linia 23 gdzie do wprowadzonego znaku char z klawiatury dodaje 4 została wyświetlona wartość 56. Spodziewałem się raczej wyniku identycznego z tym wyświetlanym przez linie 24 gdzie już po konwersji na int zostaje dodana wartość 4. Poniewież z tego co się orientuje wartość w Unicode dla znaku '8' jest większa niż znaku '4' o 4. Gdzie tkwi luka w moim rozumowaniu?można w ogóle na zmiennych char wykonywać operacje arytmetyczne?

  #4 (permalink)  
Stare 19.11.2012, 01:43
Senior Member
 
Zarejestrowany: May 2008
Postów: 514
Postów w giełdzie: 0
Domyślnie Odp: Zapis char w int z zachowaniem wartości

Ale to ci absolutnie dobry wynik pokazuje. Char to liczba na 8 bitach. Jeśli wprowadziłeś '4' to tak naprawdę wartość ascii jaka tam jest, to 52, jeśli dodasz 4 to wyjdzie 56. Innymi słowy w x nie siedzi liczba 4, ale 52. Dlatego dokonujesz konwersji w linii 15.

  #5 (permalink)  
Stare 19.11.2012, 02:38
Avatar sirastral
Member
 
Zarejestrowany: Nov 2011
Postów: 64
Postów w giełdzie: 0
Domyślnie Odp: Zapis char w int z zachowaniem wartości

Czyli funkcja println() powiększyła wartość ASCII, ale zamieniła ją na int i wyświetliła wartość kodu ascii powiększoną o 4 czyli 56, zamiast znaku który ten kod symbolizuje. Jak zrobić żeby się jednak wyświetlił znak o powiększonej wartości czyli np te '8' którego się spodziewałem, zamiast jego wartość ascii?

Próbowałem w ten sposób:
Java code
1
2
3
// x to cały czas char o warosci 4(52 w ascii)
x=x+4;
System.out.println(x);
lecz program się nie kompiluje

ale to już działa:
Java code
1
2
x++;
System.out.println(x);
i daje oczekiwany wynik w postaci wyświetlenia znaku '5', a nie jak w pierwszej wersji wartości ascii.
Dlaczego instrukcja "x=x+4;", nie działa podczas gdy "x++" się wykonuje bez problemu?przecież inkrementacja x to praktycznie to samo co "x=x+1;"?

  #6 (permalink)  
Stare 19.11.2012, 02:59
Senior Member
 
Zarejestrowany: May 2008
Postów: 514
Postów w giełdzie: 0
Domyślnie Odp: Zapis char w int z zachowaniem wartości

Po prostu char + liczba zamienia ci wynik na int. W takim wypadku spróbuj zrzutować:

Java code
1
System.out.println((char)(x+4));

  #7 (permalink)  
Stare 19.11.2012, 03:24
Avatar sirastral
Member
 
Zarejestrowany: Nov 2011
Postów: 64
Postów w giełdzie: 0
Domyślnie Odp: Zapis char w int z zachowaniem wartości

Działa.Dzięki za pomoc
Tylko dalej nie rozumiem dlaczego
Java code
1
x=x+1;
nie działa podczas gdy
Java code
1
x++;
wykonuje się bez problemu.

EDIT:
zrobiłem tak:
Java code
1
x=((char)(x+1));
i działa.
czyli po prawej stronie działania char x+1 zostało zamienione na int i przez to nie mogło być zpisane do x po lewo bez rzutowaniai?dobrze to rozumuje?

  #8 (permalink)  
Stare 19.11.2012, 04:27
Senior Member
 
Zarejestrowany: May 2008
Postów: 514
Postów w giełdzie: 0
Domyślnie Odp: Zapis char w int z zachowaniem wartości

Tak, musisz przeforsować typ w takim wypadku. Inaczej próbujesz przypisać typ 32 bitowy do typu 8 bitowego, co powoduje utratę precyzji i jest to w przypadku javy błąd. W przypadku innych języków może ro powodować jedynie warning.

  #9 (permalink)  
Stare 20.11.2012, 07:58
Senior Member
 
Zarejestrowany: Apr 2006
Postów: 1 550
Postów w giełdzie: 0
Domyślnie Odp: Zapis char w int z zachowaniem wartości

Cytat:
Napisał jsr184 Zobacz post
Tak, musisz przeforsować typ w takim wypadku. Inaczej próbujesz przypisać typ 32 bitowy do typu 8 bitowego, co powoduje utratę precyzji i jest to w przypadku javy błąd. W przypadku innych języków może ro powodować jedynie warning.
char ma 2 bajty, ale to nieistotne.
tutaj miały znaleźć się moje wątpliwości dlaczego to zwraca błąd póki sobie nie zdałem sprawy, że ta jedynka ma 32 bity...

  #10 (permalink)  
Stare 20.11.2012, 09:58
Senior Member
 
Zarejestrowany: May 2008
Postów: 514
Postów w giełdzie: 0
Domyślnie Odp: Zapis char w int z zachowaniem wartości

Właśnie ja w Javie to już od dawna nie siedzę, i coś mi świtało, że chyba char jest 2-bajtowy, ale nie do końca pamiętałem. Dzięki za poprawienie.
Odpowiedz

Szybka odpowiedź
Antispam, complete the task: 
 
Wiadomość:
Opcje

Narzędzia wątku Przeszukaj ten temat
Przeszukaj ten temat:

Zaawansowane wyszukiwanie
Wygląd

Zasady postowania
Nie możesz zakładać nowych tematów
Nie możesz pisać wiadomości
Nie możesz dodawać załączników
Nie możesz edytować swoich postów

BBCode jest Włączony
EmotikonyWłączony
[IMG] kod jest Włączony
HTML kod jest Wyłączony
Trackbacks are Wyłączony
Pingbacks are Wyłączony
Refbacks are Wyłączony


Podobne wątki
Temat Autor wątku Forum Odpowiedzi Ostatni post/autor
Zapis do ini w wartości HEX marnowak programowanie 2 02.08.2011 23:33
Zamiana char na int c++ wyskakujzdolarow programowanie 1 18.05.2010 13:37
konwertowanie z char do int c++ snowb programowanie 9 24.03.2010 00:24
C++ zamiana char na int Lotharb programowanie 4 25.02.2010 21:16
[C++] Konwertowanie char do int dzien_i_noc programowanie 4 10.02.2007 23:35


Wszystkie czasy w strefie GMT +2. Teraz jest 14:14.

Powered by vBulletin® Version 3.8.8 Beta 3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.5.2
Tłumaczenie: vBHELP.pl - Polskie wsparcie vBulletin
1418991243

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327