Ich bin noch neu in der Codierung und weiß nicht, warum ich diesen Fehler bekomme. Der Fehler verweist auf meinen Rückgabewert p in meiner makePokemon() -Methode. Ich habe versucht, meine p als Pokemon p;
an verschiedenen Stellen meines Codes zu initialisieren, aber ich erhalte nur mehr Fehler, wie alle p-Werte vordefiniert sind. Ich kann nicht als Pokemon p = new Pokemon();
initialisieren, weil es eine abstrakte Klasse ist. Wenn Sie andere Fehler in meinem Code sehen, lassen Sie es mich wissen!Warum bekomme ich den Fehler, "Variable p wurde möglicherweise nicht initialisiert"
import java.util.*;
//river program for Pokemon class
public class PokeArray {
static final int SIZE = 6;
public static void main(String[] args){
Scanner userIn = new Scanner(System.in);
String inString = new String("");
boolean endLoop = false;
int counter = 0;
//Pokemon[] arrPokO = new Pokemon[SIZE];
Pokemon p;
ArrayList<Pokemon> arrPokO = new ArrayList<>();
//loop until stopping condition is given
while(endLoop != true){
//menu text
System.out.println("Please enter the number of your choice:");
System.out.println("1. Add a Pokemon");
System.out.println("2. Print all Pokemon");
System.out.println("0. Exit the program");
System.out.print("What would you like to do? ");
//read in from user as a String -- much less errors can happen!
inString = userIn.nextLine();
//take off any spaces on the string
inString = inString.trim();
//just switch on the String no need to convert to int
switch(inString){
case "0": endLoop = true;
System.out.println("Good bye!");
break;
case "1": //do stuff to make a new Pokemon
arrPokO.add(counter%6, makePokemon()); //add in arraylist
//System.out.println("\n*****A new pokemon should get put into the array****\n");
counter++;
break;
case "2": //print out all the Pokemon
PokeArray.printArray(arrPokO);
//System.out.println("\n****The array should be printed****\n");
break;
default: //not a valid menu entry
System.out.println("\n****Invalid menu choice.****\nPlease enter a 0, 1, or 2\n");
break;
}
} //close while lp
}//close main
public static Pokemon makePokemon(){
Scanner userIn = new Scanner(System.in);
String name = "";
String selPok = ""; //selected pokemon
String yN = "";
Pokemon p;//initialize object
System.out.println("Which pokemon would you like to add?");
System.out.println("Enter the corresponding number of the selected Pokemon:");
System.out.println("1.Bulbasaur\n2.Ivysaur\n3.Venusaur\n4.Charmander\n5.Charmaleon\n6.Charizard\n7.Squirtle\n8.Wartortle\n9.Blastoise");
try{
selPok = userIn.nextLine().trim(); //user's choice of pokemon
System.out.println("Would you like to give the pokemon a name? Enter Y/N");
yN = userIn.nextLine().trim();
if(yN == "Y" || yN == "y"){
System.out.println("What is the pokemon's name?");
name = userIn.nextLine().trim();
switch(selPok){
case "1":
p = new Bulbasaur(name);
break;
case "2":
p = new Ivysaur(name);
break;
case "3":
p = new Venusaur(name);
break;
case "4":
p = new Charmander(name);
break;
case "5":
p = new Charmeleon(name);
break;
case "6":
p = new Charizard(name);
break;
case "7":
p = new Squirtle(name);
break;
case "8":
p = new Wartortle(name);
break;
case "9":
p = new Blastoise(name);
break;
}
}else{
switch(selPok){
case "1":
p = new Bulbasaur();
break;
case "2":
p = new Ivysaur();
break;
case "3":
p = new Venusaur();
break;
case "4":
p = new Charmander();
break;
case "5":
p = new Charmeleon();
break;
case "6":
p = new Charizard();
break;
case "7":
p = new Squirtle();
break;
case "8":
p = new Wartortle();
break;
case "9":
p = new Blastoise();
break;
}
}
}
catch (NumberFormatException nfe){
System.out.println("Please enter a corresponding number");
}
return p;
}//close makePokemon
Sie können die Variable mit 'Pokemon p = null; initialisieren, wenn Sie sicher sind, dass sie neu zugewiesen wird, bevor Sie sie verwenden. – khelwood
Denken Sie, was passiert, wenn der Benutzer nicht 1,2, ... 9, sondern, sagen wir, 0 oder 'a' eingibt. – avysk
Es gibt mehrere Beispiele dafür, was das schon auf SO – ControlAltDel