מה הבעיה בקוד?

Nighthawk ok

New member
מה הבעיה בקוד?

הקוד הוא:
number = str.charAt(x); System.out.println("number"); System.out.println(number); System.out.println("test_number"); System.out.println(str.charAt(x));​
str היא מחרוזת שכרגע מכילה "123456789" כל שאר המשתנים הם int התוכנית מדפיסה כל הזמן בגלל שאני ביקשתי ממנה בשביל לבדוק את הקוד ופה הבעיה כשאני מבקש להדפיס את המשתנה number הוא מדפיס 49 אבל כשהוא מדפיס את השורה האחרונה str.charAt(X) אז הוא מדפיס 1 כמו שצריך להיות מה הבעיה? הקוד הוא ב-java וההדפסה היא לשורת הפקודה = דוס
 

Nighthawk ok

New member
ולמה

אז למה רק כשאני מחזיר את זה למשתנה הוא רושם 49 ואם אני ישר מבקש להדפיס את זה הוא רושם 1 ?
 
למה אתה מכניס char ל-int?...

chatAt מחזירה char... למה אתה מנסה להכניס את ה-char לתוך משתנה מטיפוס int?? אם number היה מהטיפוס הנכון (char) אז הוא גם היה מדפיס מה שציפית...
 

zagzagzag

New member
תשובות

1. בקוד ASCII, הספרות ממוקמות החל מ48 ועד 57, כלומר כדי לקבל ערך מספרי של תו אתה יכול לחסר ממנו 48. 48 הוא למעשה '0', אז אפשר לכתוב את זה כך -
char ch = '6'; int i = ch - '0'; // i now holds 6​
2. כשאתה מדפיס את הערך אתה קורא ל-System.out.println עם משתנה מסוג char, אז המתודה מדפיסה לך char. אם היית מסב ל-int לפני השליחה היה מודפס גם שם 49.
 
אבל למה אתם מסתבכים כל-כך?../images/Emo26.gif

למה לקחת את התו '1', לעשות לו casting ל-int ולהפוך את הערך שלו ל-49, ואז לקחת את ה-49, לחסר ממנו '0' ולהחזיר אותו להיות... '1'... בדיוק מה שהוא היה מההתחלה!... למה לא לחסוך את כל הסיבוב המיותר הזה, ולהכניס את מה ש-chatAt מחזיר, לתוך משתנה char במקום??...
 

Nighthawk ok

New member
מכיוון שלאחר מכן

אני מעביר את המשתנה הזה עיבוד והוא חייב להיות מסוג int תודה על הפתרון
 
איזה "עיבוד"?...../images/Emo26.gif

אתה צריך יותר מאוחר את ערך ה-ASCII שלו? למה? נראה לי שאתה עושה משהו בדרך הלא נכונה... אם אתה צריך יותר מאוחר את ערך ה-ASCII - תעשה מה שאמרתי - תכניס את מה ש-charAt מחזירה לך לתוך משתנה (ch למשל) מטיפוס char. כשתצטרך את ערך ה-ASCII של התו - תשתמש ב-getNumericValue - מתודה סטטית של המחלקה Character. היא מקבלת char ומחזירה int (הערך המספרי של התו). זו הדרך לעשות את זה.
 
ממממממ../images/Emo4.gif...../images/Emo26.gif

זו דרך מעוותת לפתור את הבעיה... הטעות (הלוגית) הייתה שמלכתחילה הוא לקח משתנה מטיפוס int במקום char... מה שאתה אומר זה נכון - אבל זה פותר את הסימפטום בצורה מעוותת, במקום לפתור את המחלה: לשנות את number להיות מטיפוס char (ובאותה הזדמנות כדאי לשנות גם את השם שלו... וללמוד מה זה "טיפוס" ומה זה "משתנה"...
).
 
למעלה