I know a lot of the terms already, such as classes, methods, objects, blah blah blah, if we had a vocabulary test I'd ace it. I can easily compile "Hello World!" no problem, but that's because it's easy and I have it memorized by this point.
However, I am struggling with just general problems. I'm trying some practice problems on codingBat my teacher set up, and I just can't seem to get any of them right. I try to manipulate the code to how I think it should work, and it comes out wrong.
I always ask people for help, but they either do it for me, to which I learn nothing, or I am explained this process that makes 0 sense to me. "For the seed value you have to import java.util.Random then use a substring to blah blah blah" I'm lost. And it is *not* a matter of me just simply not "getting" the language or not "having the mind of a programmer", I believe anyone can learn anything if they try. I just can't seem to put everything into it's perspective.
For example, when doing boolean practice problems, I looked at the solution and realized that "if" and "||" and "!" are all symbols and words that are used to solve those types of problems. How in the hell am I supposed to know that? Is there something I'm missing? Is everything I need to know about booleans explained in it's description in the API index?
I suspect this reveals more about you than you think. What your saying is that you have the understanding needed to replicate, but not to produce.
I suppose it would be similar to if you taught someone to swim by taking them on land and teaching them how to kick their legs and move their arms, and then throwing them in the water and expecting them to just be able to swim. Doesn't work that way.
In fact, some of the issues you appear to be having isn't necessarily java-specific, but programming in general. In most languages, "if", "else", "||", "&&", and "!" will be used for boolean logic. These are things you see even in C programs.
Regardless, it tells me that you don't *really* understand the material. You can reproduce easy things you've seen before (such as Hello World), but you don't actually understand what each line of code in Hello World means. Memorizing is not learning, unfortunately.
As many have said before on this post, the first step to solving a large problem is to break it down into a bunch of much smaller and more manageable problems. If you are trying to make a game and you try to attack the graphical display and the core game code all at once, you are in for one heck of a rough time.
So my suggestion would be to take your Hello World program, and one-by-one try to incorporate new topics into it. For example:
You have a program that prints "Hello World" once.
1. Can you now make it print it 10 times?
2. After you manage that, can you have a counting variable and make it print only every other time?
3. After that, can you ask the user what they want to be printed out, and print that out instead of "Hello World"?
4. And after that, can you ask the user what they want to be printed out and ask them how many times they want it printed out, and print out what they want as many times as they want?
Each one of these problems, not matter how small the difference, introduces an entirely new concept you will *have* to learn and understand if you wish to solve them. #1 introduces looping (if you do it that way). #2 introduces boolean logic and counting variables (depending on how you did #1). #3 introduces reading user input. And #4 introduces combining the topics from #1 and #3 into a single program.
If you are just given #4 as your problem statement. You should break it down into #1 and #3 and handle each part individually.