字符串无法转换为双重错误java

时间:2014-11-12 01:08:01

标签: java string

我的代码假设读取最多100个字符串并将值存储在数组中。 当输入空字符串时,它将停止从用户读取信息。 然后它验证字符串,转换为双数并存储到单独的数组中。 然后找到所有有效数字的平均值。 唯一印刷的东西是: 1)输入的有效字符串数 2)所有有效字符串按相反的顺序排列 和 3)所有有效输入的平均值。

我认为我没问题,除非将字符串转换为双数字。我把它放在try / catch以及之后的所有其他内容中,因为否则它无法找到有效的输入。 我收到一个错误:(48:错误:不兼容的类型:字符串不能转换为double)。 我尝试在if语句中添加else,但它没有连接if和else语句。虽然当我添加else语句时,错误消失了,它只是告诉我唯一的错误是它找不到if的else。

我该怎么办?

编辑:谢谢,它现在有效。但我不认为我找到了正确的平均值。有什么建议?

import java.util.*;
public class Grades{
public static void main(String args[]){ 


  int arraycount = 0;
  final int SIZE = 10;
  int validArraycount = 0;
  final int ValidArraySize = 10;
  int valuesinValidArray = 0; 

  Scanner reader = new Scanner(System.in);
  String initialInput = new String ("");

  String [] sArray = new String[SIZE];
  double [] ValidArray = new double[ValidArraySize];

  double sum = 0;

  boolean exit = false;

  System.out.println("You may enter up to 100 grades."); 
  System.out.println("When you are done entering grades, press the enter/return key.");


  //Prints to user. Stops if nothing is entered.
  while((arraycount < SIZE)&&(exit == false)){ 
     System.out.println("Enter line " + (arraycount+1) + ": "); 
     initialInput = reader.nextLine();  


     if (initialInput.length()<1){ 
        exit = true; 
     }
     else{
        sArray[arraycount]=initialInput; 
        arraycount++;
     }
  }

     //convert string to double 
  try{
     double convertedInput = Double.parseDouble(initialInput);

     //validate strings entered by user         
     if(convertedInput >= 0 && convertedInput <=100){
      ValidArray[validArraycount] = initialInput;
     }      

     //Prints number of valid values entered
     if(ValidArray.length>0){
        System.out.println("The number of valid grades entered is " + ValidArray[0]);
     }


     //for printing array backwards
     for (int i = (arraycount-1); i>=0; i--){
        System.out.print(ValidArray.length);

     } 
     //calculates sum of all values in array of ValidArray (of grades)
     for(double d : ValidArray){
        sum += sum;
     }

      //avergae of valid number array 
     double average = (sum/ValidArray.length);

     System.out.println("Average: " + average);

  }

  catch(NumberFormatException e){
  }   
 }
}

4 个答案:

答案 0 :(得分:1)

ValidArray[validArraycount] = initialInput;

可能应该是

ValidArray[validArraycount] = convertedInput;

答案 1 :(得分:0)

在这一行:

ValidArray[validArraycount] = initialInput;

您正在尝试将字符串分配给doubles的数组。这就是错误的来源。如果您确定它将是字符串形式的双倍,您可以尝试在此调用double.parseDouble(initialInput)

答案 2 :(得分:0)

您似乎正在为数​​组分配错误的值。替换:

ValidArray[validArraycount] = initialInput;

使用:

ValidArray[validArraycount] = convertedInput;

答案 3 :(得分:0)

如前所述,要修复字符串转换问题,您的分配行应为:

ValidArray[validArraycount] = convertedInput;

要解决您的平均问题,您的代码应如下所示:

//calculates sum of all values in array of ValidArray (of grades)
for(double d : ValidArray){
   sum += d;  //  <-------- changed from sum += sum;
}

//avergae of valid number array 
double average = (sum/ValidArray.length);