2016-04-29 9 views
1

Извините, что я новичок в кодировании, я пытаюсь преобразовать массив в парные, но я хочу пропустить первую строку массива.преобразование массива в парные

У меня есть следующий код

public void organisedata() 
{ 


    try (BufferedReader readbuffer = new BufferedReader(new FileReader(filepath))) { 
     String strRead; 
     int count=0; 

     //strRead = readbuffer.readLine() != null; 

     while ((strRead = readbuffer.readLine()) != null) { 
      count++; 

      String splitarray[] = strRead.split("\t"); 
      String firstentry = splitarray[0]; 
      String secondentry = splitarray[1]; 
      String thirdentry = splitarray[2]; 
      String fourthentry = splitarray[3]; 
      String fifthentry = splitarray[4]; 
      String sixthentry = splitarray[5]; 
      String seventhentry = splitarray[6]; 
      String eighthentry = splitarray[7]; 
      String ninthentry = splitarray[8]; 
      String tenthentry = splitarray[9]; 
      String eleventhentry = splitarray[10]; 
      String twelvethentry = splitarray[11]; 
      String thirteenthentry = splitarray[12]; 
      String fourteenthentry = splitarray[13]; 
      String fifthteebthentry = splitarray[14]; 
      String sixteenthentry = splitarray[15]; 
      String seventeenthentry = splitarray[16]; 
      String eightteenhentry = splitarray[17]; 

      System.out.println(firstentry + " " + secondentry + " " +thirdentry + " " + fourthentry+ " " + fifthentry + " " + sixthentry + " " +seventhentry + " " + eighthentry+ " " +ninthentry+ " " +tenthentry+ " " +eleventhentry+ " " +twelvethentry+ " " +thirteenthentry+ " " +fourteenthentry+ " " +sixteenthentry+ " " +seventeenthentry+ " " +eightteenhentry); 


      int length =splitarray.length; 
      double[] Exprs_Val=new double[length] ; 
      for (int i = 1; i< length+1; i++) 
      { System.out.println (splitarray[i]); 
       Exprs_Val[i-1]=Double.parseDouble(splitarray[i]); 

      } 
      System.out.println("Double Array is" +Exprs_Val+""); 

     } 

    } catch (IOException e) { 
     System.err.format("IOException: %s%n", e); 
    } 
} 

этот код компилируется, то первая часть spilting моего массива и их я хочу тайные в парной разряд, однако, когда я запускаю его я получаю следующее сообщение об ошибке в терминале.

java.lang.NumberFormatException: For input string: "GSM119944" 
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) 
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
at java.lang.Double.parseDouble(Double.java:538) 
at serialanova.organisedata(serialanova.java:142) 
at serialanova.<init>(serialanova.java:41) 

входной файл

ProbeSetID GSM119944 GSM119945 GSM119946 GSM119947 GSM119948 GSM119949 GSM119950 GSM119951 GSM119952 GSM119953 GSM119954 GSM119955 GSM119956 GSM119957 GSM119958 GSM119959 GSM119960 1007_s_at 11,37651913 11,82674322 11,12302175 11,7434386 12,17296072 11,52200918 11,28840678 11,36454405 11,783231 12,10269679 12,14193446 12,14167191 11,54116091 12,06920648 11,52945627 9,692066334 +11,24298832 1053_at 7.270398138 7.534450178 7.169297224 7.730833029 6.728913697 7.033900213 8.152550207 7.357942158 7.811468938 6.704366054 7.723678376 7.607720233 6.90457947 6.837490079 7.437898775 7.60895983 8 6,704647979 117_at 8,172823015 8,350567625 8,216072585 8,052177294 7,940714093 8,122496258 8,246269493 7,597745286 8,809971026 7,299070143 7,808596965 8,390707085 7,653513989 8,680944931 8,050872759 9,242005826 8,253535243 121_at 10,06419511 11,19368787 9,846188898 10,54999199 10,17272162 10,35728397 11,36108085 10,44613907 11,16554125 10,28543507 10,12355559 10,53273535 10,37933453 10,48754106 10,54241919 10,24804257 10,20725888 1255_g_at 6,256425264 6,830607291 5,825010391 6,098156783 6,104971084 5,818458175 6,355994791 6,31131152 7,366573808 5,577411502 4,570793941 5,046955968 6,561945382 5,897955196 5,40272477 5,957542041 6,201036979 1294_at 9,540260108 9,229501062 9,34788666 9,4643475 9,764903421 9,962180073 9,30045006 9,230649257 9,783263485 8,749284991 9,466964913 9,653450466 9,076623297 9,827835105 9,096732184 9,441370378 9,102000375 1316_at 7,444821595 8,381578766 7,438297503 7,262875144 7,231406742 7,732812769 7,752616718 7,766491871 8,276988479 7,533668585 6,982003095 7,828565136 7,119046748 7,649261001 7,651054255 7,510538903 7,366082474 1320_at 4,645388076 4,776598113 6,887012613 7,275902937 6,087877539 6,841132977 5,35934964 4,514507696 7,731723615 7,531067564 3,93247219 6,254824208 7,125020518 4,264763543 6,58014897 6,747268108 4,255204695 1405_i_at 10,45746907 8,927090755 9,917244096 8,238428875 8,957485742 8,461268645 9,401926859 9,717728257 7,906093812 5,908940792 10.97142109 8,337354139 6,86662155 8,168480828 9,56724363 9,489516637 +10,39147919 1431_at 6,96721331 6,271370399 6,095264756 7,683606278 5,608434719 7,288548664 6,613085022 6,386992852 7,172060044 6,283570929 6,027862996 5,749611048 6,410620957 6,074076381 6,454061235 6,894934672 5,412199729 1438_at 8,16 5022563 8,601696109 8,127203872 8,330128005 7,194363227 7,447903155 7,979068416 7,625896467 8,669911995 8,894808527 6,943193024 8,47454858 10,16632365 7,728061128 7,388841509 7,525051872 7,655379957 1487_at 8,717167566 8,948921171 8,482996756 9,224306979 9,006381141 9,004412187 8,89076478 8,95289573 9,135284813 8,730470712 8,910346798 8,815229729 8,880683672 8,460717188 8,636235029 8,979530875 8,45864663 1494_f_at 8,569307104 9,272563796 8,099782465 8,482816224 8,728872241 8,893912706 9,24799404 8,36195164 9,190847721 8,682856425 7,89146507 +12,02424423 8,988280669 8,810714569 8,354246959 8,549493485 8,240601365 1598_g_at 11,55719086 11,63133551 11,46310591 11,22502937 11,16871228 11,6159067 11,18760975 10,91536891 12,13072975 11,3505339 11,15684203 11,29458341 11,46845278 10,94348537 11,48669348 12,11094884 11,55747693 160020_at 9,,3690069 10,55363 004 9.652222774 9.014218196 9.88234234 10.49070862 9.871292777 10.01205992 9.537328536 8.667695292 9.547152914 9.949466166 10.10975472 10.12075296 10.41474576 9.828687732 1729_at 10.36136675 9.817158399 9.832590412 9,028762922 8,621520517 8,93287561 8,083130024 8,679599605 9,290645997 8,960094561 9,127580834 9,846010315 8,903352147 9,109550293 8,828138425 8,705080643 8,263143078 177_at 6,692846164 7,789500294 7,379171629 6,805409654 6,915594737 7,092665506 7,144847932 5,378081482 7,822745778 7,184686193 6,954013623 6,72866045 7,372252198 6,647955518 7,887163057 7,844297173 6,518292095 1773_at 7,427238548 7,202968595 7,614420308 8,008938758 7,290033624 7,542243543 6,537122301 6,967084261 6,776254109 8,008170278 6,877636117 7,119945885 8,024472104 7,716287778 7.16699594 7,433050044 7,651089965 179_at 9,267843565 9,852632546 9,480728984 10,11332621 9,281188401 9,522899304 9,763622175 9,384980124 10,41921144 9,687657195 9,227467149 9,72530832 9,839523301 9,714825974 9,873303264 9,488571197 9,638988643

, если вам больше нужен мой код, дайте мне знать. Спасибо

+0

GSM119944 не в формате double, вы должны найти индекс массива, который имеет это значение, и либо удалить его, либо манипулировать строкой, чтобы он принимался методом parseDouble(). – fractalwrench

+0

Вы, кажется, делаете абсолютно правильная операция, за исключением того, что файл имеет несколько типов данных и не только двойной. Если вы уверены и знаете, что n-й столбец не является двойным или числом, вы можете пропустить этот столбец для цикла. –

+0

@RaviKumarGupta \t Это строка массива, которая не является значением .. как я могу пропустить это? – user6271958

ответ

0

Я считаю, что проблема связана с вашим входным файлом.

Ваша ошибка в том, что "GSM119944" не является форматом double, так как у него есть алфавитные символы.

Ошибка, возникающая в этой строке при попытке превратить эту строку в двойную.

Exprs_Val[i-1] = Double.parseDouble(splitarray[i]); 

Если вы не можете исправить введенные данные, то вы можете использовать try-catch блок для обработки этого недопустимого ввода. Это может выглядеть примерно так, но то, что вы хотите сделать в сценарии ошибок, зависит от вас.

for (int i = 0; i < length; i++) { 
    System.out.println (splitarray[i]); 
    try { 
     Exprs_Val[i] = Double.parseDouble(splitarray[i]); 
    } catch(NumberFormatException e) { 
     // This entry cannot be parsed into a double, insert a value to indicate an error 
     Exprs_Val[i] = Double.MAX_VALUE; 
    } 
} 
0

Есть несколько проблем с вашим кодом:

1:

Вы перебор мимо длиной массива. Это будет сгенерировано ArrayOutOfBoundsException когда i достигает значения length

int length = splitarray.length; 
double[] Exprs_Val=new double[length] ; 
for (int i = 1; i< length+1; i++) //"i" will reach value == length, which is out of bounds 
{ 
    System.out.println (splitarray[i]); 
    Exprs_Val[i-1]=Double.parseDouble(splitarray[i]); 
} 

2:

"GSM119944" не является допустимым числом. Что заставляет вас думать, что вы сможете разобрать его в двойном? Вы хотите извлечь часть после «GSM *»?

0

Как выглядит ваш ввод. Когда вы разбираете элементы массива в double, он выдает ошибку, потому что ваш элемент String содержит алфавитные символы.

+0

ive вставил его в вопрос на tht top – user6271958

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