Array Variable

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Array Variable

    hi erstmal,
    hab jetzt mein FH als informatiker angefangen und ab leide mein erstes problem beim programmieren mit java.
    Meine aufgabe ist es grad eine bestimmte anzahl von zeichen in einem array zu speicher und dann am stück auszugeben.

    Quellcode

    1. int a = 1;
    2. String ZeichenSpeicher [];
    3. ZeichenSpeicher = new String [a];
    4. for (int i=0; i<ZeichenSpeicher.length; i++){
    5. String Einlesen = Eingabe.readString();
    6. a++;
    7. }
    Alles anzeigen


    mein problem ist das die variable a nicht mit wachst.
    hoffe mir kann jemand helfen
  • hmm...
    Da du denke ich schon die Semantik mit String-Array verwenden sollst (wahrscheinlich in der Aufgabenstellung vorgegeben, nehme ich an), würde ich dir empfehlen, einfach das Array mit einem ausreichend großen Anfangswert zu initialisieren.
    In der Aufgabenstellung ist ja vielleicht sogar ein Maximalwert fuer die einzugebenden char-Zeichen angegeben, den könntest du ja benutzen. Falls dem nicht so ist, nimm einfach mal 200 als Parameter für die Array-Größe... (Speicherbegrenzung habt ihr ja sicher für die Programmieraufgabe noch nicht :lol: ) und fang dann den möglicherweise auftretenden Fehler (Array-Überschreitung bei mehr als 200Zeichen) mit ner if-Abfrage ab. D.h. alles was mehr als 200 Zeichen enthält, wird nicht mehr gespeichert.
    Das sollte denke ich für die Aufgabenstellung reichen.
    Also so würde ichs machen =).
    Dein Array im Beispiel hat nur 2 Felder, [0] und [1]... jedes Zeichen, das zuviel eingegeben ist, bemängelt der Compiler. Du wirst aber sicher bei einem Array mit 200 Feldern im Standardfall keine Fehlermeldung bekommen, denn wer schreibt schon einen Roman als Aufrufparameter für ein Java-Programm!! :D :P
    \\.-'´´ Alw4ys k33p on burn!ng, 'cAu$e if you are buRnT out y0ur l!fe sURreNd3Rs deAth! ``'-.//
  • Ja du hattest recht, leider hab ich erst nachdem ich selber herausgefunden hab gelesen ^^. Dumm gelaufen. Trozdem Danke.


    Quellcode

    1. String ZeichenSpeicher [];
    2. ZeichenSpeicher = new String [50];
    3. int i =0;
    4. double AOperant = Eingabe.readDoubleValue();
    5. String AOperantString = Double.toString(AOperant);
    6. ZeichenSpeicher[i] = AOperantString;
    7. i++;
    8. String Operator = Eingabe.readString();
    9. ZeichenSpeicher[i] = Operator;
    10. i++;
    11. if(Operator == "+")
    12. double BOperant = Eingabe.readDoubleValue();
    13. String BOperantString = Double.toString(BOperant);
    14. ZeichenSpeicher[i] = BOperantString;
    15. AOperant = AOperant + BOperant;
    16. i++;
    17. if(Operator == "-")
    18. double BOperant = Eingabe.readDoubleValue();
    19. String BOperantString = Double.toString(BOperant);
    20. ZeichenSpeicher[i] = BOperantString;
    21. AOperant = AOperant - BOperant;
    22. i++;
    Alles anzeigen


    Neues Problem...
    Zeigt immer so ein Fehler an beim einlesen der BOperanten.

    PS: Die aufgaben stellung lautete ungefäher:
    Taschenrechner mit bestimmten Operatoren zu programmieren in dem die Operanten und Operatoren in einem 50 Stelligen Array gespeichert werden...
  • hm... sollte mit den richtigen Klammern auf jeden Fall funktionieren wie d0nUt schon gesagt hat.
    Das separate Speichern in diesem Array macht schon Sinn, denke ich.
    Damit könnte man hinterher (evtl Erweiterung der Aufgabe) algebraische Gesetze (kommutativ-, assoziativ-,...) etc einbauen, indem man z.B. die Arrays sortieren lässt... weiss ja nicht, ob das vielleicht die Absicht dabei ist.
    Bleibt noch die Frage, ob und vor allem warum man die Zahlen als String speichern sollte... :shock: :?:

    Vielleicht für Typecast vom char zum int... oO Und wenn wir grad beim Thema Typecast sind, hab ich dazu gleich ne Frage, die sich mir da auftut:

    Das Casten von Typ double in String (und damit char) läuft doch ähnlich ab wie beim Cast zu int, oder?? Demnach würden ja die Nachkommastellen abgesägt und somit bei eventuellem Re-Casting ungenaue Werte produziert...? Oder täusche ich mich da jetzt?

    PS: Anm., "Operand" schreibt man meines Wissens mit "d" am Ende, normalerweise jedenfalls.
    :shock: :wink:
    \\.-'´´ Alw4ys k33p on burn!ng, 'cAu$e if you are buRnT out y0ur l!fe sURreNd3Rs deAth! ``'-.//
  • Dann nochmal ein dickes thx, das ist voll nervig wen man das dann gesagt bekommt fällt das immmer voll ins auge^^.
    Nach der Logic bei diesen Programm würde ich nicht suchen. Das ist only train wo einfach alles mal durch probiert wird und das alles zum thema Taschenrechner.

    So da stellt sich bei meinem Programm das nächste Problem

    Quellcode

    1. import HfT.Eingabe;
    2. import java.lang.Math;
    3. public class Main {
    4. public Main() {
    5. }
    6. public static void main(String[] args) {
    7. String ZeichenSpeicher [];
    8. ZeichenSpeicher = new String [50];
    9. int i =0;
    10. double AOperant = Eingabe.readDoubleValue();
    11. String AOperantString = Double.toString(AOperant);
    12. ZeichenSpeicher[i] = AOperantString;
    13. i++;
    14. String Operator = Eingabe.readString();
    15. ZeichenSpeicher[i] = Operator;
    16. i++;
    17. if(Operator == "+"){
    18. double BOperant = Eingabe.readDoubleValue();
    19. String BOperantString = Double.toString(BOperant);
    20. ZeichenSpeicher[i] = BOperantString;
    21. AOperant = AOperant + BOperant;
    22. i++;
    23. }
    24. if(Operator == "-"){
    25. double BOperant = Eingabe.readDoubleValue();
    26. String BOperantString = Double.toString(BOperant);
    27. ZeichenSpeicher[i] = BOperantString;
    28. AOperant = AOperant - BOperant;
    29. i++;
    30. }
    31. if(Operator == "*"){
    32. double BOperant = Eingabe.readDoubleValue();
    33. String BOperantString = Double.toString(BOperant);
    34. ZeichenSpeicher[i] = BOperantString;
    35. AOperant = AOperant * BOperant;
    36. i++;
    37. }
    38. if(Operator == "/"){
    39. double BOperant = Eingabe.readDoubleValue();
    40. String BOperantString = Double.toString(BOperant);
    41. ZeichenSpeicher[i] = BOperantString;
    42. AOperant = AOperant / BOperant;
    43. i++;
    44. }
    45. if(Operator == "#"){
    46. AOperant = -AOperant;
    47. i++;
    48. }
    49. if(Operator == "x²"){
    50. AOperant = AOperant * AOperant;
    51. i++;
    52. }
    53. if(Operator == "sin"){
    54. AOperant = Math.sin(AOperant);
    55. i++;
    56. }
    57. if(Operator == "c"){
    58. i--;
    59. }
    60. }
    61. }
    Alles anzeigen


    Der rechnet mir einfach diesen 2. Operant nicht rein. Der bleicbt immer vor der IF schleife stehen.
  • jut jut, 1 Vorlesung später haben wit dan auch equals durchgenomen ^^.
    war wieder zu schnell.

    so hab das teil jetzt fertig... bitte alle mal mosern und verbesern, aber bitte konstruktiv und mit erklärungen ^^. Wie gesagt habe nicht mal ganz die grundlagen durch mit java.

    Quellcode

    1. package aufgabe_2;
    2. import HfT.Eingabe;
    3. /**
    4. *
    5. * @author xmoO
    6. */
    7. public class Main {
    8. /** Creates a new instance of Main */
    9. public Main() {
    10. }
    11. /**
    12. * @param args the command line arguments
    13. */
    14. public static void main(String[] args) {
    15. // TODO code application logic here
    16. double COperand = 0;
    17. System.out.println("Aufgabe_2 von otdif110 bzw Dennis Ottenbacher\n");
    18. String ZeichenSpeicher [];
    19. ZeichenSpeicher = new String [50];
    20. int i =0;
    21. double AOperand = Eingabe.readDoubleValue();
    22. String AOperandString = Double.toString(AOperand);
    23. ZeichenSpeicher[i] = AOperandString;
    24. i++;
    25. do {
    26. String Operator = Eingabe.readString();
    27. ZeichenSpeicher[i] = Operator;
    28. i++;
    29. if( Operator.equals("+") ){
    30. double BOperand = Eingabe.readDoubleValue();
    31. String BOperandString = Double.toString(BOperand);
    32. ZeichenSpeicher[i] = BOperandString;
    33. COperand = AOperand + BOperand;
    34. String COperandString = Double.toString(COperand);
    35. ZeichenSpeicher[49] = COperandString;
    36. i++;
    37. }
    38. if( Operator.equals("-") ){
    39. double BOperand = Eingabe.readDoubleValue();
    40. String BOperandString = Double.toString(BOperand);
    41. ZeichenSpeicher[i] = BOperandString;
    42. COperand = AOperand - BOperand;
    43. String COperandString = Double.toString(COperand);
    44. ZeichenSpeicher[49] = COperandString;
    45. i++;
    46. }
    47. if(Operator.equals("*")){
    48. double BOperand = Eingabe.readDoubleValue();
    49. String BOperandString = Double.toString(BOperand);
    50. ZeichenSpeicher[i] = BOperandString;
    51. COperand = AOperand * BOperand;
    52. String COperandString = Double.toString(COperand);
    53. ZeichenSpeicher[49] = COperandString;
    54. i++;
    55. }
    56. if(Operator.equals("/")){
    57. double BOperand = Eingabe.readDoubleValue();
    58. String BOperandString = Double.toString(BOperand);
    59. ZeichenSpeicher[i] = BOperandString;
    60. COperand = AOperand / BOperand;
    61. String COperandString = Double.toString(COperand);
    62. ZeichenSpeicher[49] = COperandString;
    63. i++;
    64. }
    65. if(Operator.equals("#")){
    66. COperand = -AOperand;
    67. String COperandString = Double.toString(COperand);
    68. ZeichenSpeicher[49] = COperandString;
    69. }
    70. if(Operator.equals("x2")){
    71. COperand = AOperand * AOperand;
    72. String COperandString = Double.toString(COperand);
    73. ZeichenSpeicher[49] = COperandString;
    74. }
    75. if(Operator.equals("sin")){
    76. COperand = Math.sin(AOperand);
    77. String COperandString = Double.toString(COperand);
    78. ZeichenSpeicher[49] = COperandString;
    79. }
    80. if(Operator.equals("c")){
    81. ZeichenSpeicher = new String [50];
    82. COperand = 0;
    83. i = 0;
    84. double ANew = Eingabe.readDoubleValue();
    85. String ANewString = Double.toString(ANew);
    86. ZeichenSpeicher[i] = ANewString;
    87. AOperand = ANew;
    88. i++;
    89. }
    90. if(Operator.equals("=")){
    91. for (int j = 0 ; j < i ; j++ ) {
    92. System.out.print(ZeichenSpeicher[j] + " ");
    93. }
    94. System.out.println(ZeichenSpeicher[49]);
    95. ZeichenSpeicher[i] = ZeichenSpeicher[49];
    96. i++;
    97. }
    98. AOperand = COperand;
    99. } while (true);
    100. }
    101. }
    Alles anzeigen


    der array mit 50 und noch ein paar andere sachen waren vorgegeben.
  • Das ganze Zeug was du bei einem Operator machst:

    Quellcode

    1. if( Operator.equals("+") ){
    2. double BOperand = Eingabe.readDoubleValue();
    3. String BOperandString = Double.toString(BOperand);
    4. ZeichenSpeicher[i] = BOperandString;
    5. COperand = AOperand + BOperand;
    6. String COperandString = Double.toString(COperand);
    7. ZeichenSpeicher[49] = COperandString;
    8. i++;
    9. }

    kann man auch so machen:

    Quellcode

    1. if( Operator.equals("+") ){
    2. ZeichenSpeicher[i++] = Double.toString(Eingabe.readDoubleValue());
    3. ZeichenSpeicher[49] = Double.toString(AOperand + BOperand);
    4. }

    Und muss es wirklich ein "String[50]" sein, oder kann es auch ein "double[50]" sein?
    Und Kommentare sind übrigens etwas schönes :)