2016-04-15 77 views
1

我正在创建一个简单的程序,获取名称,年龄和最喜欢的数字/秒。问题在于,当用户选择输入多于1的最爱号码时,会出现此异常。使用椭圆或省略号出错

exception

请帮我解决这个问题仍使用椭圆测试类 - > favnum2方法*

测试类

import java.util.Scanner; 
public class testing{ 
public static Scanner input; 


public static void main(String[] args){ 

    boolean choicerepeat=true; 
    int favnumoftimes; 

    while(choicerepeat==true){ 
     input = new Scanner(System.in); 
     testing2 obj1 = new testing2(); 
     String name=""; 
     int age=0; 
     favnumoftimes=0; 
     double favnum=0, favnumarr[]=new double[999]; 
     boolean choice1; 

     System.out.print("What is your name? "); 
     name = input.nextLine(); 
     System.out.print("What is your age? "); 
     age = input.nextInt(); 

     obj1.message1(name); 
     obj1.message2(age); 

     System.out.print(name+" do you only have one favorite number? (If yes type 'true' else 'false' - NOTE: lowercase only) "); 
     choice1 = input.nextBoolean(); 

     if(choice1==true) 
      favnum1(); 
     else{ 
      System.out.println("How many favorite numbers do you have "+name+"? "); 
      favnumoftimes = input.nextInt(); 
      for(int a=0;a<favnumoftimes;a++){ 
       System.out.print("Enter favorite number "+ (a+1) +": "); 
       favnumarr[a]=input.nextDouble(); 
      } 

      for(int a=0;a<favnumarr.length;a++){ 
       favnum2(favnumoftimes, favnumarr[a]); 
      } 
     } 

     System.out.println(); 
     System.out.println("Do you want to restart the program? (true(Yes) else false(No)) "); 
     choicerepeat = input.nextBoolean(); 

    } 
} 

public static void favnum1(){ 
    System.out.print("Enter favorite number: "); 
    double favnumholder1 = input.nextDouble(); 
    System.out.println("Your favorite number is "+favnumholder1+" ."); 
} 

public static double favnum2(int favnumoftimesholder,double...favtemphold2){ 
    System.out.print("Your favorite numbers are "); 
    for(int a=0;a<=favnumoftimesholder;a++){ 
     System.out.print(favtemphold2[a]+", "); 
    } 
    return 0; 
} 
} 

testing2类

public class testing2{ 
public static String message1(String nameholder){ 
    for(int a=0;a<nameholder.length();a++){ 
     char strholder = nameholder.charAt(a); 
     if(Character.isDigit(a)){ 
      System.out.println("Names don't have numbers... "); 
      break; 
     } 
     else continue; 
    } 
    System.out.println("\nHi "+nameholder+"! Welcome to my simple program. "); 
    return nameholder; 
} 

public static int message2(int ageholder){ 
    System.out.println("Your age is "+ageholder+" years old? Oh my goodness. "); 
    System.out.println(); 
    return ageholder; 
} 
} 
+2

我建议你在这里通过堆栈跟踪,而不是将它们链接为图像。 – Thomas

+0

谢谢你RubioRic。 – Jammes

回答

1

问题是,可变参数使用le创建新数组ngth等于传递的参数数量。因此double...favtemphold2将创建一个新的数组favtemphold2和因为你只通过1个元件(favnum2(favnumoftimes, favnumarr[a]);),该阵列将具有长度1

你可能想要么通过多个元件或整个阵列,即favnum2(favnumoftimes, favnumarr);。由于double...基本上是语法糖double[]他们是平等的,并通过一个双阵列的双可变参数将工作。

虽然未来使用可变参数的警告:请谨慎使用Object...,因为数组也是对象。

+0

谢谢托马斯先生。 :d – Jammes