저는 C #을 처음 접했고 Java에 대한 기본 지식이 있지만이 코드를 제대로 실행할 수 없습니다.
기본 계산기 일 뿐이지 만 VS2008 프로그램을 실행하면이 오류가 발생합니다.
나는 거의 동일한 프로그램을 수행했지만 자바에서는 JSwing을 사용하여 완벽하게 작동했습니다.
다음은 C #의 형식입니다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace calculadorac
{
public partial class Form1 : Form
{
int a, b, c;
String resultado;
public Form1()
{
InitializeComponent();
a = Int32.Parse(textBox1.Text);
b = Int32.Parse(textBox2.Text);
}
private void button1_Click(object sender, EventArgs e)
{
add();
result();
}
private void button2_Click(object sender, EventArgs e)
{
substract();
result();
}
private void button3_Click(object sender, EventArgs e)
{
clear();
}
private void add()
{
c = a + b;
resultado = Convert.ToString(c);
}
private void substract()
{
c = a - b;
resultado = Convert.ToString(c);
}
private void result()
{
label1.Text = resultado;
}
private void clear()
{
label1.Text = "";
textBox1.Text = "";
textBox2.Text = "";
}
}
무엇이 문제일까요? 그것을 해결할 방법이 있습니까?
추신 : 나는 또한 시도했다
a = Convert.ToInt32(textBox1.text);
b = Convert.ToInt32(textBox2.text);
작동하지 않았습니다.
답변
오류는 정수를 구문 분석하려는 문자열에 실제로 유효한 정수가 포함되어 있지 않음을 의미합니다.
양식이 생성 될 때 텍스트 상자에 유효한 정수가 포함되는 경우는 거의 없습니다. 여기서 정수 값을 가져옵니다. (생성자에있는 것과 같은 방식으로) 버튼 클릭 이벤트 를 업데이트 a
하고 업데이트하는 것이 훨씬 더 합리적 b
입니다. 또한 Int.TryParse
메서드를 확인하십시오 . 문자열에 실제로 정수가 포함되어 있지 않으면 사용하기가 훨씬 쉽습니다. 예외를 throw하지 않으므로 복구하기가 더 쉽습니다.
답변
숫자 입력을 구문 분석하는 것과 관련이 없다는 점을 제외하고는이 정확한 예외가 발생했습니다. 따라서 이것은 OP의 질문에 대한 답이 아니지만 지식을 공유하는 것은 허용됩니다.
문자열을 선언했고 중괄호 ({})가 필요한 JQTree 와 함께 사용하도록 형식을 지정했습니다 . 올바른 형식의 문자열로 허용 되려면 이중 중괄호를 사용해야합니다.
string measurements = string.empty;
measurements += string.Format(@"
{{label: 'Measurement Name: {0}',
children: [
{{label: 'Measured Value: {1}'}},
{{label: 'Min: {2}'}},
{{label: 'Max: {3}'}},
{{label: 'Measured String: {4}'}},
{{label: 'Expected String: {5}'}},
]
}},",
drv["MeasurementName"] == null ? "NULL" : drv["MeasurementName"],
drv["MeasuredValue"] == null ? "NULL" : drv["MeasuredValue"],
drv["Min"] == null ? "NULL" : drv["Min"],
drv["Max"] == null ? "NULL" : drv["Max"],
drv["MeasuredString"] == null ? "NULL" : drv["MeasuredString"],
drv["ExpectedString"] == null ? "NULL" : drv["ExpectedString"]);
이 질문을 찾았지만 수치 데이터를 구문 분석하지 않는 다른 사람들에게 도움이되기를 바랍니다.
답변
텍스트 필드의 숫자에 대해 명시 적으로 유효성을 검사하지 않는 경우 어떤 경우에도 사용하는 것이 좋습니다.
int result=0;
if(int.TryParse(textBox1.Text,out result))
이제 결과가 성공하면 계산을 진행할 수 있습니다.
답변
문제점
오류가 발생하는 몇 가지 가능한 경우가 있습니다.
-
때문에이
textBox1.Text
숫자 만 포함되어 있지만 숫자는 너무 커서 / 너무 작 -
textBox1.Text
포함 하기 때문에 :- a) 비 숫자 (
space
시작 / 끝, 시작 제외-
) 및 / 또는 - b) 지정하지 않고 코드에 적용된 문화권에서 천 구분 기호를 지정
NumberStyles.AllowThousands
하거나 지정NumberStyles.AllowThousands
하지만thousand separator
문화권 에 잘못 입력 하거나 - c) 소수점 구분자 (
int
파싱에 없어야 함 )
- a) 비 숫자 (
예 :
사례 1
a = Int32.Parse("5000000000"); //5 billions, too large
b = Int32.Parse("-5000000000"); //-5 billions, too small
//The limit for int (32-bit integer) is only from -2,147,483,648 to 2,147,483,647
사례 2 a)
a = Int32.Parse("a189"); //having a
a = Int32.Parse("1-89"); //having - but not in the beginning
a = Int32.Parse("18 9"); //having space, but not in the beginning or end
사례 2 b)
NumberStyles styles = NumberStyles.AllowThousands;
a = Int32.Parse("1,189"); //not OK, no NumberStyles.AllowThousands
b = Int32.Parse("1,189", styles, new CultureInfo("fr-FR")); //not OK, having NumberStyles.AllowThousands but the culture specified use different thousand separator
사례 2 c)
NumberStyles styles = NumberStyles.AllowDecimalPoint;
a = Int32.Parse("1.189", styles); //wrong, int parse cannot parse decimal point at all!
겉보기에는 좋지 않지만 실제로는 괜찮습니다.
사례 2 a) OK
a = Int32.Parse("-189"); //having - but in the beginning
b = Int32.Parse(" 189 "); //having space, but in the beginning or end
사례 2 b) OK
NumberStyles styles = NumberStyles.AllowThousands;
a = Int32.Parse("1,189", styles); //ok, having NumberStyles.AllowThousands in the correct culture
b = Int32.Parse("1 189", styles, new CultureInfo("fr-FR")); //ok, having NumberStyles.AllowThousands and correct thousand separator is used for "fr-FR" culture
솔루션
모든 경우에 textBox1.Text
Visual Studio 디버거로 의 값을 확인하고 int
범위에 대해 순전히 허용되는 숫자 형식이 있는지 확인하십시오 . 이 같은:
1234
또한 고려할 수 있습니다
TryParse
대신 사용하여Parse
구문 분석되지 않은 번호로 인해 예외 문제가 발생하지 않는지 확인하십시오.-
결과를 확인하고
TryParse
그렇지 않은 경우 처리true
int val; bool result = int.TryParse(textbox1.Text, out val); if (!result) return; //something has gone wrong //OK, continue using val
답변
텍스트 상자에 디자인 타임 또는 현재 값이 있는지 언급하지 않았습니다. 양식 초기화시 양식 디자인시 텍스트 상자에 입력하지 않으면 텍스트 상자에 값이 없을 수 있습니다. desgin에서 text 속성을 설정하여 양식 디자인에 int 값을 넣을 수 있으며 작동합니다.
답변
제 경우에는 탈출하기 위해 이중 중괄호를 넣는 것을 잊었습니다. {{myobject}}
답변
그것도 내 문제였습니다 .. 내 경우에는 페르시아어 번호를 라틴어 번호로 변경하고 작동했습니다. 그리고 변환하기 전에 문자열을 다듬습니다.
PersianCalendar pc = new PersianCalendar();
char[] seperator ={'/'};
string[] date = txtSaleDate.Text.Split(seperator);
int a = Convert.ToInt32(Persia.Number.ConvertToLatin(date[0]).Trim());