2015-03-25 2 views
-3

Так что у меня проблемы с назначением. Это вопрос, предложенный нам: Напишите свой код в файле Averages.java. Ответы должны выводиться с использованием модуля ввода-вывода, как описано выше.Как преобразовать Int в Double в моем назначении массива

Ваше задание - рассчитать средние значения, учитывая список входных данных. Сначала спросите пользователей, сколько номеров (удваивает) она войдет. Затем запросите для этого много цифр.

Затем выведите следующие значения min, max, sum, mean, median, mode - в этом порядке. Для целей этого упражнения вы можете предположить, что существует либо один режим, либо нет режимов. (например, в {1,3,3,4,4}, нет режима, так как есть 2 3 и 2 4, но {1,3,3,4} имеет режим 3). Если режим не существует, вы можете вывести строку «none».

Медиана определяется путем нахождения среднего числа. Если такой номер не существует, он рассчитывается путем принятия среднего значения из двух средних чисел.

Подсказка: для выполнения медианных/режимов расчетов может оказаться полезным сохранить список чисел в некотором упорядоченном порядке. т. е. на каждой вставке, поместите номер в «правильное» место.

Пример (примечание комментировало описание не должно быть напечатано - они только для вашей информации):

10 
5.8 
1.4 
2.3 
1.4 
1.4 
1.0 
3.2 
10.5 
11.0 
2.0 

RESULT: 1.0  //min 
RESULT: 11.0  //max 
RESULT: 40.0  //sum 
RESULT: 4.0  //mean 
RESULT: 2.15  //median 
RESULT: 1.4  //mode 

Это мой текущий код:

public class Averages{ 
    public static void main(String []args){ 
     int n, c, d, swap,sum=0; 
     Scanner in = new Scanner(System.in); 
     System.out.println("Input number of integers to sort"); 
     n = in.nextInt(); 
     int array[] = new int[n]; 
     System.out.println("Enter " + n + " integers"); 
     for (c = 0; c < n; c++){ 
      array[c] = in.nextInt(); 
      sum=sum+array[c]; 
     } 

     for (c = 0; c < (n - 1); c++) { 
      for (d = 0; d < n - c - 1; d++) { 
       if (array[d] > array[d+1]) /* For descending order use < */ 
       { 
        swap = array[d]; 
        array[d] = array[d+1]; 
        array[d+1] = swap; 
       } 
      } 
     } 
     System.out.println("Sorted array:"); 
     for (c = 0; c < (n - 1); c++) { 
      System.out.println(array[c]); 
     } 


     System.out.println("Sum="+sum); 
     System.out.println("Max="+array[n-1]); 
     System.out.println("Min="+array[0]); 
     System.out.println("Mean="+sum/n); 

     double median = 0; 
     double mid=0; 
     if(n%2 == 0) 
     { 
      int temp=(n/2)-1; 
      for(int i=0;i<n;i++) 
      { 
       if(temp==i || (temp+1)==i) 
       { 
        mid=mid+array[i]; 
       } 
      } 
      mid=mid/2; 
      System.out.println("Median value is: "+mid); 
     } 
     else 
     { 
      int temp=(n/2); 
      for(int i=0;i<n;i++) 
      { 
       if(temp==i) 
       { 
        mid=array[i]; 
        System.out.println("Median value: "+mid); 
       } 
      } 
     } 
//Mode calculation 
     int i,j,z, tmp, maxCount, modeValue; 
     int[] tally=new int[n]; 
     for(i=0;i<n;i++) 
     { 
      for(j=0;j<n-i;j++) 
      { 
       if(j+1!=n) 
       { 
        if(array[j]>array[j+1]) 
        { 
         tmp=array[j]; 
         array[j]=array[j+1]; 
         array[j+1]=tmp; 
        } 
       } 
      } 
     } 
     for (i = 0; i < n; i++) 
     { 
      for(z=i+1;z<n;z++) 
      { 
       if(array[i]==array[z]) 
       { 
        tally[i]++; 
       } 
      } 
     } 
     maxCount = 0; 
     modeValue = 0; 
     for (i = 0; i <n; i++) 
     { 
      if (tally[i] > maxCount) 
      { 
       maxCount = tally[i]; 
       modeValue = array[i]; 
      } 
     } 
     System.out.println("Mode value is :"+modeValue); 
    } 
} 

Как вы можете видеть из моего кода, он может запускать только Int's Double. Я пробовал переписывать все Int как Double, но это не работает. Может ли кто-нибудь помочь мне с тем, чтобы исправить мою программу, чтобы принимать и выводить double?

Это то, что я пробовал:

import java.util.Scanner; 
 
public class Averages{ 
 
public static void main(String []args){ 
 
double n, c, d, swap,sum=0; 
 
Scanner in = new Scanner(System.in); 
 
System.out.println("Input number of Doubles to sort"); 
 
n = in.nextDouble(); 
 
double array[] = new double[n]; 
 
System.out.println("Enter " + n + " doubles"); 
 
for (c = 0; c < n; c++){ 
 
array[c] = in.nextDouble(); 
 
sum=sum+array[c]; 
 
} 
 

 
for (c = 0; c < (n - 1); c++) { 
 
for (d = 0; d < n - c - 1; d++) { 
 
if (array[d] > array[d+1]) /* For descending order use < */ 
 
{ 
 
swap = array[d]; 
 
array[d] = array[d+1]; 
 
array[d+1] = swap; 
 
} 
 
} 
 
} 
 
System.out.println("Sorted array:"); 
 
for (c = 0; c < (n - 1); c++) { 
 
System.out.println(array[c]); 
 
} 
 
    
 
    
 
System.out.println("Sum="+sum); 
 
System.out.println("Max="+array[n-1]); 
 
System.out.println("Min="+array[0]); 
 
System.out.println("Mean="+sum/n); 
 
    
 
double median = 0; 
 
double mid=0; 
 
if(n%2 == 0) 
 
{ 
 
double temp=(n/2)-1; 
 
for(double i=0;i<n;i++) 
 
{ 
 
if(temp==i || (temp+1)==i) 
 
{ 
 
mid=mid+array[i]; 
 
} 
 
} 
 
mid=mid/2; 
 
System.out.println("Median value is: "+mid); 
 
} 
 
else 
 
{ 
 
double temp=(n/2); 
 
for(int i=0;i<n;i++) 
 
{ 
 
if(temp==i) 
 
{ 
 
mid=array[i]; 
 
System.out.println("Median value: "+mid); 
 
} 
 
} 
 
} 
 
//Mode calculation 
 
double i,j,z, tmp, maxCount, modeValue; 
 
double[] tally=new double[n]; 
 
for(i=0;i<n;i++) 
 
{ 
 
for(j=0;j<n-i;j++) 
 
{ 
 
if(j+1!=n) 
 
{ 
 
if(array[j]>array[j+1]) 
 
{ 
 
tmp=array[j]; 
 
array[j]=array[j+1]; 
 
array[j+1]=tmp; 
 
} 
 
} 
 
} 
 
} 
 
for (i = 0; i < n; i++) 
 
{ 
 
for(z=i+1;z<n;z++) 
 
{ 
 
if(array[i]==array[z]) 
 
{ 
 
tally[i]++; 
 
} 
 
} 
 
} 
 
maxCount = 0; 
 
modeValue = 0; 
 
for (i = 0; i <n; i++) 
 
{ 
 
if (tally[i] > maxCount) 
 
{ 
 
maxCount = tally[i]; 
 
modeValue = array[i]; 
 
} 
 
} 
 
System.out.println("Mode value is :"+modeValue); 
 
} 
 
}

+2

«который не работает» не говорит нам * ничего * о том, что проблемы вы столкнулись. Вы также используете 'nextDouble' вместо' nextInt'? Кроме того, ваш код не является Javascript, поэтому, пожалуйста, не помещайте его в фрагмент Javascript и, пожалуйста, попробуйте отформатировать свой код с соответствующим отступом в будущем. (Другой пользователь сделал это для вас на этот раз ...) –

+0

Также поместите каждую операцию (max, min, average, sum) в другую функцию и заставьте ее вернуть результат. Вызовите функции в основном и распечатайте результаты там. Это сделает код более читаемым. –

+0

Я говорю, что «это не работает» в том смысле, что я знаю, что что-то не работает. Вопрос, который я задаю, - это как преобразовать массив, который вводит/выводит ints в массив, который вставляет/выдает удваивается. Код работает на 100% с ints как есть, я просто не знаю, как заставить его работать с удвоениями. – Blake

ответ

1

Существует одна проблема, связанная с отсутствием последнего кода во время печати отсортированного массива.

для (с = 0; с < (п - 1); C++) {

вместо того, чтобы использовать

для (с = 0; с < N; C++) {

Для двойной проблема, не изменяйте все от int до double.

  1. Изменение двойной только массива и переменная, используемого для хранения результата (своп, суммы и т.д.) и временных переменных для хранения данных.
  2. Храните переменную, используемую для индексирования массива (n, d, c) как Int.
  3. Прочитать фактический элемент данных как Double с помощью nextDouble.

    массив [c] = in.nextDouble();

Код с минимальным внесением изменений в код. Пожалуйста, создайте метод для отдельной функции, как мин(), не более(), сортировки() и т.д.

import java.util.Scanner; 

public class Averages{ 
    public static void main(String []args){ 
     double swap,sum=0; 
     int d, c, n; 
     Scanner in = new Scanner(System.in); 
     System.out.println("Input number of integers to sort"); 
     n = in.nextInt(); 
     double array[] = new double[n]; 
     System.out.println("Enter " + n + " integers"); 
     for (c = 0; c < n; c++){ 
      array[c] = in.nextDouble(); 
      sum=sum+array[c]; 
     } 

     for (c = 0; c < (n - 1); c++) { 
      for (d = 0; d < n - c - 1; d++) { 
       if (array[d] > array[d+1]) /* For descending order use < */ 
       { 
        swap = array[d]; 
        array[d] = array[d+1]; 
        array[d+1] = swap; 
       } 
      } 
     } 
     System.out.println("Sorted array:"); 
     for (c = 0; c < (n - 1); c++) { 
      System.out.println(array[c]); 
     } 


     System.out.println("Sum="+sum); 
     System.out.println("Max="+array[n-1]); 
     System.out.println("Min="+array[0]); 
     System.out.println("Mean="+sum/n); 

     double median = 0; 
     double mid=0; 
     if(n%2 == 0) 
     { 
      int temp=(n/2)-1; 
      for(int i=0;i<n;i++) 
      { 
       if(temp==i || (temp+1)==i) 
       { 
        mid=mid+array[i]; 
       } 
      } 
      mid=mid/2; 
      System.out.println("Median value is: "+mid); 
     } 
     else 
     { 
      int temp=(n/2); 
      for(int i=0;i<n;i++) 
      { 
       if(temp==i) 
       { 
        mid=array[i]; 
        System.out.println("Median value: "+mid); 
       } 
      } 
     } 
//Mode calculation 
     int i,j,z, maxCount; 
     double tmp, modeValue; 
     int[] tally=new int[n]; 
     for(i=0;i<n;i++) 
     { 
      for(j=0;j<n-i;j++) 
      { 
       if(j+1!=n) 
       { 
        if(array[j]>array[j+1]) 
        { 
         tmp=array[j]; 
         array[j]=array[j+1]; 
         array[j+1]=tmp; 
        } 
       } 
      } 
     } 
     for (i = 0; i < n; i++) 
     { 
      for(z=i+1;z<n;z++) 
      { 
       if(array[i]==array[z]) 
       { 
        tally[i]++; 
       } 
      } 
     } 
     maxCount = 0; 
     modeValue = 0; 
     for (i = 0; i <n; i++) 
     { 
      if (tally[i] > maxCount) 
      { 
       maxCount = tally[i]; 
       modeValue = array[i]; 
      } 
     } 
     System.out.println("Mode value is :"+modeValue); 
    } 
} 
0

Вы должны, вероятно, просто бросить РАСЧ в парном разряде, когда вы делаете расчет с участием рациональных чисел, например, так: System.out.println("Mean=" + ((double)sum/n)); Это эффективно временно превращает их в двойные.

+0

Это не относится к двойным входам. Если вы произведете двойники как ints, они потеряют десятичные знаки. –

+0

Я предполагал, что все входы должны были быть целыми числами, так как это то, что отображается в подсказке. –

0

вход является неправильным ...

10 5.8 1.4 2.3 1.4 1.4 1.0 3.2 10.5 11.0 2.0 

Поскольку вы сказали:

System.out.println("Enter " + n + " integers"); 

И 5,8, 1,4 и т.д .. не являются целыми числами ...

Поместите на линии 12:

array[c] = in.next(); 

вместо:

 array[c] = in.nextInt(); 
+0

Я бы рекомендовал использовать 'nextDouble()', как предлагал @Jon Skeet. –

+0

Ввод, который вы указываете, - это возможные возможные входы. Он не связан с моим кодом, но должен быть входом, с которым мой код способен работать. Проблема в том, что я не знаю, как заставить мой код работать с двойниками вместо int. – Blake

+0

Замените все 'int' на' double', обе поддерживают одни и те же операторы (%, +, -, *) –

0

Когда вы сказали

Я пытался переписывать все Int в качестве двойника, но это не работает.

это должно применяться только к данным, которыми вы управляете, а не к индексам массива. Если это не сработает, отправьте код неисправности, и мы сможем вам помочь.

Вы должны отделить индексы и размеры массива (например: n, c, d и т. Д.), Которые всегда имеют тип int из значений, которыми вы управляете (массив [], swap, median, mid и т. Д.). который будет типа двойного

int n, c, d; 
double swap, sum=0; 
... 
n = in.nextInt(); 
double array[] = new double[n]; 
.... 
+0

Неисправный код отправлен – Blake

0

Пара проблем я могу место: Во-первых отдать свой массив как double массива. Второе использование in.nextDouble(), а не in.nextInt(). В-третьих, запросите doubles, как и ваше состояние назначения. Наконец, индексы, размеры и подсчеты массива должны быть ints.

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