-1

Here is part of my code that I'm messing around with:

import java.util.Scanner;
public class Hwk12 {
public static void main(String args[])
{
    final int ARRAY_SIZE = 100;
    int numberElements = 0;
    char[] array = new char[ARRAY_SIZE];
    getInfo(array, numberElements);
    System.out.println(array);
    System.out.println("1");
    System.out.println(numberElements);
    System.out.println(array.length);
}
public static void getInfo(char[] letters, int numberElements)
{
    Scanner keyboard = new Scanner(System.in);
    System.out.print("Please enter some letters or -1 to quit: ");
    String input = keyboard.nextLine();
    char characterInput = input.charAt(0);
    while(!input.equals("-1") && numberElements < letters.length)
    {
        letters[numberElements] = characterInput;
        numberElements++;
        System.out.print("Please enter some letters or -1 to quit: ");
        input = keyboard.nextLine();
        characterInput = input.charAt(0);
}

When I run it and input things, this is the output:


Please enter some letters or -1 to quit: a

Please enter some letters or -1 to quit: s

Please enter some letters or -1 to quit: d

Please enter some letters or -1 to quit: f

Please enter some letters or -1 to quit: s

Please enter some letters or -1 to quit: a

Please enter some letters or -1 to quit: d

Please enter some letters or -1 to quit: f

Please enter some letters or -1 to quit: a

Please enter some letters or -1 to quit: s

Please enter some letters or -1 to quit: df

Please enter some letters or -1 to quit: d

Please enter some letters or -1 to quit: -1

asdfsadfasdd

1

0

100


Why does it display numberElements as 0 when I clearly changed it by increamenting it during the while loop in the getInfo() method?

yassadi
  • 524
  • 1
  • 9
  • 20

2 Answers2

0

You are not changing the numberElement defiend in the main method. You are changing numberElement you have introduced to getInfo() as input. There is two way you can achieve your goal:

  1. Change the name of numberElement in getInfo() to something else.
  2. return numberElement, and set numberElement value in the main method to the returned value from getInfo().

Also may I suggest you take a look at the difference between local and global variables again.

yassadi
  • 524
  • 1
  • 9
  • 20
0

It is the scope. You declared the variable outside the method. And that var is an int.

When you are inside the method it is a new var which value is assigned to 0. But it has a whole new space in memory. So whatever happens to that inside the method doesnt affect anything outside of it.

Int is not passed by reference.

Arrays are passed by reference. And when changed inside the method the original declared variable is mutated.

Juan
  • 6,125
  • 3
  • 30
  • 31