2013-10-17 57 views
0

我有一个项目,我需要输入-25到25之间的数字并计算每个输入的次数。我只接受正数的代码。 26和39行给我的问题,我不能让我的数组数组来保存任何负数。无法在数组中保留负值

我的代码:

public class PP62{ 

    public static void main(String[] args) { 

     char response = 'a'; 
     int numbers[] = new int[100], count, amount[] = new int[100], n2; 
     count = 0; 

     do{ 

     if((response == 'y')||(response == 'Y')||(count == 0)){ 

      count++; 

      System.out.println("Enter in an integer between -25 and 25."); 
      do{ 
      numbers[count] = SavitchIn.readLineInt(); 

      if((numbers[count] > 25)||(numbers[count] < -25)){ 
       System.out.println("Error, Invalid Input. Re-Enter integer between -25 and 25."); 
      } 

      else if((numbers[count] <= 25)||(numbers[count] >= -25)){ 
       n2 = numbers[count]; 
       amount[n2]++; 
      } 

      }while((numbers[count] > 25)||(numbers[count] < -25)); 

      System.out.println("Enter in another integer? (Y/N)"); 
      response = SavitchIn.readLineNonwhiteChar(); 
     } 

     else if ((response == 'n')||(response == 'N')){ 

      for(int a = -25; a <= 25; a++){ 
       System.out.println(a + "'s entered: "); 
       System.out.println(amount[a] + "\n"); 
      } 
      System.exit(0); 
     } 

     else{ 
      System.out.println("Incorrect Input. Must be 'Y' (yes) or 'N' (no)."); 
      response = SavitchIn.readLineNonwhiteChar(); 
     }}while(count > 0); 
    } 
} 
+0

哪里是线26和39? – gjman2

+0

第26行:金额[n2] ++; - (在第一个else语句中)第39行:System.out.println(amount [a] +“\ n”); - (在for循环) – user2888594

回答

0

数组索引不能为负,所以你需要解决这些问题,从0

这样开始:

char response = 0; 
int numbers[] = new int[51]; 

do 
{ 
    System.out.println("Enter in an integer between -25 and 25."); 
    int n = SavitchIn.readLineInt(); 
    if((n > 25) || (n < -25)) 
     System.out.println("Error, Invalid Input. Re-Enter integer between -25 and 25."); 
    else 
     numbers[n+25]++; 

    System.out.println("Enter in another integer? (Y/N)"); 
    do 
    { 
     response = SavitchIn.readLineNonwhiteChar(); 
     if ((Character.toLowerCase(response) != 'y') && (Character.toLowerCase(response) != 'n')) 
      System.out.println("Incorrect Input. Must be 'Y' (yes) or 'N' (no)."); 
    } while ((Character.toLowerCase(response) != 'y') && (Character.toLowerCase(response) != 'n')); 
} while (Character.toLowerCase(response) == 'y'); 

for(int a = -25; a <= 25; a++) 
    System.out.println(a + "'s entered: " + numbers[25+a] + " times\n"); 
+0

谢谢!这解决了我的问题。 – user2888594

0

在你的代码

else if((numbers[count] <= 25)||(numbers[count] >= -25)){ 
       n2 = numbers[count]; 
       amount[n2]++; 
      } 

如果n2 = numbers[count] = -25n2将为负数,amount[n2]++访问负数索引的数组。你不能访问一个负数索引的数组,这样做会导致java.lang.ArrayIndexOutOfBoundsException

为什么我们不使用大小为50的数组,而是用a[n2+25]++来代替!

+0

感谢您的帮助,这工作。 – user2888594

-1

我无法测试的代码,因为我没有SavitchIn类,但我注意到,行

amount[n2]++; 

会在某个时候尝试用指数为负数的数组。数组索引从0开始向上。我会建议

amount[n2+25]++; 

然后

System.out.println(amount[a-25]+"\n"); 
显示屏上

。也就是说,将要表示的数字(-25..25)转换为数组可以处理的范围(0..50)。在Java中

+0

感谢您的解释。帮助我很多,但输出时你需要+ 25,而不是减去。 – user2888594