2014-02-19 4 views
0

Итак, сегодня в классе нам пришлось создать программу, которая запрашивала ввод значений между или равными -25 и 25, и выйти из программы, когда вводится число вне этих значений. Когда я пытаюсь ввести любое число выше 25 или отрицательное значение, программа вылетает и появляется сообщение об ошибке.Преобразование положительного целого числа с отрицательным значением

Итак, вот мой вопрос, как заставить эти отрицательные значения работать. Я включил программу ниже, чтобы помочь любому, кого вы готовы помочь решить эту проблему.

import java.util.Scanner; 
public class Program2 
{ 

    public static void main(String[] args) 
    { 
     Scanner scan = new Scanner (System.in); 
     int occurrences[] = new int [51]; 

     System.out.println ("Enter integers in the range if -25 through 25."); 
     System.out.print ("Signal end with a"); 
     System.out.println ("number outside the range."); 

     int entered = scan.nextInt();  
     while (entered >= -25 && entered <= 25) 
     { 
      occurrences [entered] ++; 
      entered = scan.nextInt(); 
     } 

     System.out.println ("Number\tTimes"); 
     for (int check = -(25); check <= 25; check++) 
      if (occurrences [check] >= 1) 
       System.out.println (check + "\t" + occurrences [check]); 

    } 
} 
+0

«программа выходит из строя, и появляется сообщение об ошибке» никогда не бывает, что это связано с тем, что вы указываете очень конкретное сообщение об ошибке, а также номер строки! – Zavior

+1

Ничего себе. У этого кода есть как минимум две проблемы, и каждый, кто не отвечает, ОБОИХ из них получает downvoted * немедленно *. Территориальный много? Ответ отложен. – Rainbolt

+0

@John Я не ограничил вас, но, судя по количеству случайных downvotes в моих других ответах, вы можете немного остыть :) – Zavior

ответ

2

Проблема в том, что вы не можете использовать отрицательные числа для индексации в массив Java.

Вы могли смещаться индексы массива следующим образом:

occurrences [entered + 25] ++; 

Это переназначить номера от -25 до 25, как от 0 до 50, что позволяет использовать их в качестве индексов массива.

(Вам нужно изменить остальную часть программы соответственно;. Я оставляю это как упражнение для читателя)

3

Проблема находится на линии

occurrences [entered] ++; 

Отрицательные числа не могут быть использованы как индексы для массива. Чтобы исправить это, вы можете использовать отдельную переменную для отслеживания количества отсканированных значений, например count, и использовать это для доступа к массиву.

1

Индексы массивов не могут быть отрицательными. Таким образом, грязное решение (но работа) будет заключаться в том, чтобы добавить 25 к введенному значению, прежде чем использовать его в качестве индекса массива. Это будет работать для отрицательных чисел, но не для nurber> 25. Чтобы использовать такие значения, вам нужно использовать больший массив или использовать другой способ хранения значений.

Смежные вопросы