الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لا أستطيع التحويل من string الى int

بدأه vector_ever في 25 مارس 2011 · 7 رد · 828 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي سؤال وقد حاولت جاهدا لكنني لم اجد سبب منطقي لا من قريب ولا من بعيد للخطأ الذي أحصل عليه ولذلك ارجو المساعدة

في البداية طبعا انا اريد التحويل من مصفوفة string الى مصفوفة int فقد كنت أقوم بذلك عن طريق (Integer.parseInt(s وكمثال لما اعنيه المثال التالي:

     int [] integer = new int [4];
        String [] string = {"2", "3", "4", "9"};


        for (int i = 0; i < integer.length; i++)
        {
        	integer = Integer.parseInt(string);
        	System.out.println(integer);
        }

الآن المشكلة التي لدي هي كالتالي

لدي ملف اكسل واريد القراءة منه وتخزين محتوياته في مصفوفة من نوع int وعند المباشرة بذلك طهر ت لي رسالة الخطأ التالي

post-152477-064049200 1301028977_thumb.j

لذلك لجأت الى حيلة وهي ان اقوم بقرآة الملف وتخزين المحتويات في مصفوفة من النوع String وقد نجحت بذلك وظهرت لي النتيجة كما اريدها والكود كما هو

import javax.swing.JOptionPane;

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;


public class NEHT {

	/**
	 * @param args
	 */


	private String inputFile;

	public void setInputFile(String inputFile) {
		this.inputFile = inputFile;
	}

	public void read() throws IOException  {
		File inputWorkbook = new File(inputFile);
		Workbook w;
		try {
			w = Workbook.getWorkbook(inputWorkbook);
			// Get the first sheet
			Sheet sheet = w.getSheet(0);


			//---------------------------read from XML and store in array----------------------------------//

			int x = sheet.getRows()-1;       // Machines_numbers
			int y = sheet.getColumns()-1;    // Jobs_numbers
			// we subtracted 1 from rows and coulumns because the first row and column is test

			   String[][] array = new String[x][y]; //processing time for every product on every machine

		        String output = "";   // Accumulate text here (should be StringBuilder).
		        //... Print array in rectangular form using nested for loops.
				for (int i = 1; i < sheet.getRows(); i++) {
					for (int j = 1; j < sheet.getColumns(); j++) {

						Cell cell = sheet.getCell(j, i);


		                array[i-1][j-1] = cell.getContents();

		                output += " " + array[i-1][j-1];
		            }
		            output += "\n";
		        }



		        JOptionPane.showMessageDialog(null, "The input is " + "\n" + output, 
		        		"F" + (sheet.getRows()-1) + "|Sijk, prmu|Cmax",  JOptionPane.INFORMATION_MESSAGE);


		 		    } 
		catch (BiffException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws IOException {
		NEHT read = new NEHT();
		read.setInputFile("c:/temp/test1.xls"); // مكان تخزين الملف المطلوب قرائته
		read.read();




		       System.exit(0);

	}

عند هذه النقطة وكل شي تمام لكن وبما ان الهدفهو الحصول على مصفوفة من النوع int فقد قررت ان احول من String الى int كما عملت في الكود الاول

وكان الكود الجديد بعد التعديل عليه كما يلي:

import javax.swing.JOptionPane;

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;


public class NEHT {

	/**
	 * @param args
	 */


	private String inputFile;

	public void setInputFile(String inputFile) {
		this.inputFile = inputFile;
	}

	public void read() throws IOException  {
		File inputWorkbook = new File(inputFile);
		Workbook w;
		try {
			w = Workbook.getWorkbook(inputWorkbook);
			// Get the first sheet
			Sheet sheet = w.getSheet(0);


			//---------------------------read from XML and store in array----------------------------------//

			int x = sheet.getRows()-1;       // Machines_numbers
			int y = sheet.getColumns()-1;    // Jobs_numbers
			// we subtracted 1 from rows and coulumns because the first row and column is test

			   String[][] array = new String[x][y]; //processing time for every product on every machine
			   int[][] arr = new int[x][y]; //هنا اضنا المصفوفة الجديدة من النوع انتجر 

		        String output = "";   // Accumulate text here (should be StringBuilder).
		        //... Print array in rectangular form using nested for loops.
				for (int i = 1; i < sheet.getRows(); i++) {
					for (int j = 1; j < sheet.getColumns(); j++) {

						Cell cell = sheet.getCell(j, i);


		                array[i-1][j-1] = cell.getContents();

		                arr[i-1][j-1] = Integer.parseInt(array[i-1][j-1]);// هنا قمت بعملية التحويل بين الصنفين

		                output += " " + arr[i-1][j-1]; // أريد طباعة المصفوفة الجديدة
		            }
		            output += "\n";
		        }



		        JOptionPane.showMessageDialog(null, "The input is " + "\n" + output, 
		        		"F" + (sheet.getRows()-1) + "|Sijk, prmu|Cmax",  JOptionPane.INFORMATION_MESSAGE);


		 		    } 
		catch (BiffException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws IOException {
		NEHT read = new NEHT();
		read.setInputFile("c:/temp/test1.xls"); // مكان تخزين الملف المطلوب قرائته
		read.read();




		       System.exit(0);

	}

لكن لكي اتفاجئ واحصل على نفس الخطا الذي كنت احصل عليه كلما تخزين القراءات في الملف داخل المصفوفة من النوع int

لا اعرف سبب الخطا الذي يبدو غير منطقي بالمرة لا من قريب ولا من بعيد

فيا ريت يا شباب اللي بيقدر يساعدني بكون له من الشاكرين لانه الموضوع مهم جدا واريد ان اكمل مشروعي

الملف الذي أخذت القراءات منه بالمرفقات

عفوا على الاطالة

test1.rar

المرفقات
error.jpg

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#2

السلام عليكم

هل حاولت تجرب ملف اخر؟ .. او انك تاخذ جزء من ملفك صحيح وتقراه ..

قد تكون المشكله انه لايوجد رقم اصلاً حتى يتم تحويله وهذا هو سبب الاكسبشن

#3

مرحبا اخى

الكود الثانى سليم ويعمل معى بدون اخطاء وينفذ المطلوب

post-165385-019689700 1301038779_thumb.p

لم اقم بتغيير اى شئ

استخدمت المكتبة jexcelapi_2_6_12

والكود الذى اشتغل معى فى المرفقات

NHT2.java

تحياتى

المرفقات
456.png


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#4
Eisa Ayed كتب:

السلام عليكم

هل حاولت تجرب ملف اخر؟ .. او انك تاخذ جزء من ملفك صحيح وتقراه ..

قد تكون المشكله انه لايوجد رقم اصلاً حتى يتم تحويله وهذا هو سبب الاكسبشن

الملف صحيح والملف به ارقام وكل شيء

فقط انت قم بالاطلاع عليه وستراه

MOHAMED FATHEI كتب:

مرحبا اخى

الكود الثانى سليم ويعمل معى بدون اخطاء وينفذ المطلوب

post-165385-019689700 1301038779_thumb.p

لم اقم بتغيير اى شئ

استخدمت المكتبة jexcelapi_2_6_12

والكود الذى اشتغل معى فى المرفقات

NHT2.java

تحياتى

أخي العزيز هل تعني انه حتى بعد ظهور النتيجة لا يظهر أي خطأ لديك!!!!؟؟؟

انا ما زال ظهور الخطأ لدي مستمر ولا أعرف السبب وحتى جربت الكود اللي بالمرفقات الخطا يظهر بعد ظهور النتيجة

انا استخدم المكتبة jexcelapi أيضا بس هل من الممكن ان ترسل لي المكتبة لديك ربما يكون هناك اختلاف بالاصدار

هل لديك أي أفكار تساعدني

شكرا

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#5

لم يظهر لى اى خطأ لا أثناء التشغيل ولا بعد انهاء البرنامج

post-165385-068462800 1301069559_thumb.p

المكتبة فى المرفقات

jxl.jar

استخدم معها الكود فى المشاركة السابقة وملف اكسيل تبعك فى المشاركة الاولى

موفق

المرفقات
333.png


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#6

والله يا أخ محمد لا ادري ما العلة ما زال نفس الخطا الغير منطقي وكان الامر كالسحر

أريد منك ان تجرب الكود التالي وهذه المرة مباشرة مصفوفة int اخزن بها القرءات بدون مصفوفة String

أتمنى منك ان تجربها وتعلمني بالنتيجة

واذا كان لديك اي ارشادات ممكن ان تساعدني على تخطي هذا الخطأ الذي يبدو كالسحر

import java.io.File;
import java.io.IOException;
import javax.swing.JOptionPane;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

/**
 *
 * @author oracle_java
 */
public class NEHT {

    private String inputFile;

    public void setInputFile(String inputFile) {
        this.inputFile = inputFile;
    }

    public void read() throws IOException {
        File inputWorkbook = new File(inputFile);
        Workbook w;
        try {
            w = Workbook.getWorkbook(inputWorkbook);
            // Get the first sheet
            Sheet sheet = w.getSheet(0);


            //---------------------------read from XML and store in array----------------------------------//

            int x = sheet.getRows() - 1;       // Machines_numbers
            int y = sheet.getColumns() - 1;    // Jobs_numbers
            // we subtracted 1 from rows and coulumns because the first row and column is test

            int[][] arr = new int[x][y]; //processing time for every product on every machine

            String output = "";   // Accumulate text here (should be StringBuilder).
            //... Print array in rectangular form using nested for loops.
            for (int i = 1; i < sheet.getRows(); i++) {
                for (int j = 1; j < sheet.getColumns(); j++) {

                    Cell cell = sheet.getCell(j, i);


                    arr[i - 1][j - 1] = Integer.parseInt(cell.getContents());// هنا قمت بعملية التحويل الى int بشكل مباشر

                    output += " " + arr[i - 1][j - 1];  // أريد طباعة المصفوفة الجديدة
                }
                output += "\n";
            }



            JOptionPane.showMessageDialog(null, "The input is " + "\n" + output,
                    "F" + (sheet.getRows() - 1) + "|Sijk, prmu|Cmax", JOptionPane.INFORMATION_MESSAGE);


        } catch (BiffException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        NEHT read = new NEHT();
        read.setInputFile("c:/temp/test1.xls"); // مكان تخزين الملف المطلوب قرائته‡
        read.read();

        System.exit(0);

    }
}

المشكلة ان الخطا يشير دائما الى (Integer.parseInt(s ويقول انه format غير معروف

ارجو المساعدة

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#7

اخى المشكلة عندك تتمثل فى ان الدالة

sheet.getColumns()

تعيد عدد الاعمدة + 1 اى 8 وهذا مالا تتوقعه خاصة ان شقيقتها

sheet.getRows()

تعيد عدد الصفوف تماما 4

غيرت الكود فى حلقة الدوران بزيادة الجملة (-1)

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.File;
import java.io.IOException;
import javax.swing.JOptionPane;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

/**
 *
 * @author oracle_java
 */
public class NHT2 {

	private String inputFile;

	public void setInputFile(String inputFile) {
    	this.inputFile = inputFile;
	}

	public void read() throws IOException {
    	File inputWorkbook = new File(inputFile);
    	Workbook w;
    	try {
        	w = Workbook.getWorkbook(inputWorkbook);
        	// Get the first sheet
        	Sheet sheet = w.getSheet(0);


        	//---------------------------read from XML and store in array----------------------------------//

        	int x = sheet.getRows() - 1;   	// Machines_numbers
        	int y = sheet.getColumns() - 1;	// Jobs_numbers
        	// we subtracted 1 from rows and coulumns because the first row and column is test

        	String[][] array = new String[x][y]; //processing time for every product on every machine
        	int[][] arr = new int[x][y]; //هنا اضنا المصفوفة الجديدة من النوع انتجر

        	String output = "";   // Accumulate text here (should be StringBuilder).
        	//... Print array in rectangular form using nested for loops.
        	System.out.print("rows : " + sheet.getRows());
        	System.out.println(" ,columns : " + sheet.getColumns());
        	for (int i = 1; i < sheet.getRows(); i++) {
            	for (int j = 1; j < sheet.getColumns() - 1; j++) {

                	Cell cell = sheet.getCell(j, i);


                	array[i - 1][j - 1] = cell.getContents();

                	arr[i - 1][j - 1] = Integer.parseInt(array[i - 1][j - 1]);// هنا قمت بعملية التحويل بين الصنفين

                	output += " " + arr[i - 1][j - 1]; // أريد طباعة المصفوفة الجديدة
            	}
            	output += "\n";
        	}



        	JOptionPane.showMessageDialog(null, "The input is " + "\n" + output,
                	"F" + (sheet.getRows() - 1) + "|Sijk, prmu|Cmax", JOptionPane.INFORMATION_MESSAGE);


    	} catch (BiffException e) {
        	System.err.println(e.getMessage());
        	e.printStackTrace();
    	}
	}

	public static void main(String[] args) throws IOException {
    	NHT2 read = new NHT2();
    	read.setInputFile("c:/temp/test1.xls"); // مكان تخزين الملف المطلوب قرائته
    	read.read();

    	System.exit(0);

	}
}

الان يعمل

تحياتى

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 25 مارس 2011 في 22:50


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#8

شكرا اخي على ملاحظتك عملت بعض التعديلات بالاضافة للتعديل اللي اشرت اليه بمشاركتك الاخيرة مشكورا واشتغلت اخيرا

شكرا مرة اخرى

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


مواضيع مشابهة